Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Вернуть несколько значений из функции
Новая тема
Ответить
цитата
20/05/08 в 10:40
freeek
к примеру имеем:
Код:
function bla($var,$array)
{
...
return $result;
}
а если мне надо вернуть не одно значение, а несколько?
после ретурна, выполнение кода функции прекращается, если все необходимое засунуть в массив, то опять же придется извлекать каждое его значение, получиться масло маслянное
Оффтопик:
пока писал вопрос, навскидку появилось пару мыслей, но я не думаю что это что то оптимизирует
цитата
20/05/08 в 10:59
Core
передай несколько параметров по ссылке
var $var1;
var $var2;
function bla(&$var1, &$var2)
{
$var1 = 2;
$var2 = 3;
}
если пользуешься класами - используй свойства класса, если нет - используй global $var1; global $var2; если не хочешь по ссылке передавать.
цитата
20/05/08 в 11:03
Core
а вообще юзай гугл
http://www.google.com/search?hl=en&q=%D0%B2%D0%B5%D1%80%D0%BD%D %D0%B8+php
http://www.comprog.ru/phpp95.html
цитата
20/05/08 в 11:06
freeek
оценил
цитата
20/05/08 в 11:07
fil
А я не пойму, что значит "придется извлекать каждое его значение"? Просто берешь и используешь:
Код:
function bla($var,$array)
{
...
$result['one'] = 'Hello!';
$result['two'] = 15;
$result['three'] = $newarray;
return $result;
}
$bla = bla($var,$array);
// переменные готовы:
echo $bla['one'];
echo $bla['two'];
echo $bla['three'];
цитата
20/05/08 в 11:14
freeek
fil писал:
А я не пойму, что значит "придется извлекать каждое его значение"? Просто берешь и используешь:
Код:
function bla($var,$array)
{
...
$result['one'] = 'Hello!';
$result['two'] = 15;
$result['three'] = $newarray;
return $result;
}
$bla = bla($var,$array);
// переменные готовы:
echo $bla['one'];
echo $bla['two'];
echo $bla['three'];
не спорю, можно и так,
только если там 50 извлекаемых переменных, можно и руки сломать, пока все укажешь
цитата
20/05/08 в 11:14
dDan
Тоже хотел написать чтобы юзал массив.
Так же по ссылке можешь переменные складывать или юзать глобальные переменные.
цитата
20/05/08 в 11:16
dDan
freeek писал:
не спорю, можно и так,
только если там 50 извлекаемых переменных, можно и руки сломать, пока все укажешь
Почему?
Ты ведь можешь не задавать их всех а просто
for($i = 0; $i< 50); $i++){
$result[] = $i;
}
return $rusult;
Думаю не оболомишся
цитата
20/05/08 в 11:22
freeek
dDan писал:
Почему?
Ты ведь можешь не задавать их всех а просто
for($i = 0; $i< 50); $i++){
$result[] = $i;
}
return $rusult;
Думаю не оболомишся
это можно сделать и попроще,
но суть в том что, я просто не вдавался в дебри, т.е.
если речь идет и массивах, то это определенный стринговый кей для каждого значения
извлечь, проблем нету,
а вот потом, что ними будем делать дальше - это вопрос,
если каждая переменная, ранее уже имеет свое имя и смысловую нагрузку,
то тупо, чтобы не запутаться, такой вариант мало привлекательный
впринципе, всех вблагодарю и оценил, топик можно считать закрытым
цитата
20/05/08 в 13:00
SAV
ассоциативный массив используй по аналогии выше с 'one'...
сделай вида 'takae_peremennaya', 'drugaya_peremennaya'...
какие тут могут быть проблемы?
цитата
20/05/08 в 13:08
Core
freeek писал:
это можно сделать и попроще,
но суть в том что, я просто не вдавался в дебри, т.е.
если речь идет и массивах, то это определенный стринговый кей для каждого значения
извлечь, проблем нету,
а вот потом, что ними будем делать дальше - это вопрос,
если каждая переменная, ранее уже имеет свое имя и смысловую нагрузку,
то тупо, чтобы не запутаться, такой вариант мало привлекательный
впринципе, всех вблагодарю и оценил, топик можно считать закрытым
а вообще юзай ООП, и у тебя не будет возникать таких вопросов
цитата
20/05/08 в 13:08
Юнга
[url=http://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование]ООП[/url] и [url=http://ru.wikipedia.org/wiki/Класс_(программирование)]классы[/url] спасут детей русской демократии.
Ыыыю.. А че русские урлы низззя?
цитата
20/05/08 в 13:12
Core
одна и та же мысль была выдана двумя человеками одновременно в 14:08
ООП форева!
цитата
20/05/08 в 23:31
Formator
Ну можно конечно вот так вот изъебнуться:
Код:
function func()
{
$ret["one"]=1;
$ret["two"]=2;
$ret["three"]=3;
return $ret;
}
extract(func());
echo $one;
echo $two;
Таким образом, в функции все переменные заносятся в массив, а при окончании выполнения функции этот массив преобразовывается в переменные. Но это то же, если перечислить все переменные в global фукнкции, хотя более гибко.
Вообще не понятно, зачем такое нужно. Нет описания задачи.
Цитата:
а вот потом, что ними будем делать дальше - это вопрос
Тогда надо писать на объектах, чтобы все переменные работали в пределах каждого объекта.
цитата
21/05/08 в 06:03
freeek
если результат тот, который ожидаю
то этого вполне хватит
цитата
22/05/08 в 15:44
_s_[sov]
Используй массивы, самый простой и работоспособный способ.
Или еще вариант:
Код:
<?
function arr(){
for($i=0;$i<10;$i++)
{ $a .= $i; }
return $a;
}
?>
цитата
22/05/08 в 17:30
dDan
ну и нахрена строчку выводить?
можно правда делать $st .= $i.'|'
а потом сделать explode, Но имхо ахинея
цитата
22/05/08 в 19:04
onn
можно ещё так извратится:
Код:
function abc(){
return Array(12345,67890)
}
list($v1,$v2)=abc();
хотя массивы уже предлагали, но такое почитабельнее imho
цитата
22/05/08 в 20:43
freeek
вариант extract подошел, а я даже и забыл про него,
вернее думал он по другому работает
цитата
23/05/08 в 14:25
netzoner
Лучше уже использовать массив, так как глобальные переменные обещают убрать в 6м пхп.
цитата
27/05/08 в 20:37
Toor
Если значений не много и хочется сделать компактно - то еще можно так:
function func()
{
$ret[]=1;
$ret[]=2;
$ret[]=3;
return $ret;
}
list($one, $two, $three) = func();
Хотя ООП конечно рулит
Новая тема
Ответить
Эта страница в полной версии