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: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;
Думаю не оболомишся


это можно сделать и попроще,
но суть в том что, я просто не вдавался в дебри, т.е.

если речь идет и массивах, то это определенный стринговый кей для каждого значения

извлечь, проблем нету,
а вот потом, что ними будем делать дальше - это вопрос,
если каждая переменная, ранее уже имеет свое имя и смысловую нагрузку,
то тупо, чтобы не запутаться, такой вариант мало привлекательный


впринципе, всех вблагодарю и оценил, топик можно считать закрытым smail04.gif
цитата
20/05/08 в 13:00
 SAV
ассоциативный массив используй по аналогии выше с 'one'...
сделай вида 'takae_peremennaya', 'drugaya_peremennaya'...

какие тут могут быть проблемы?
цитата
20/05/08 в 13:08
 Core
freeek писал:
это можно сделать и попроще,
но суть в том что, я просто не вдавался в дебри, т.е.

если речь идет и массивах, то это определенный стринговый кей для каждого значения

извлечь, проблем нету,
а вот потом, что ними будем делать дальше - это вопрос,
если каждая переменная, ранее уже имеет свое имя и смысловую нагрузку,
то тупо, чтобы не запутаться, такой вариант мало привлекательный


впринципе, всех вблагодарю и оценил, топик можно считать закрытым smail04.gif


а вообще юзай ООП, и у тебя не будет возникать таких вопросов icon_smile.gif
цитата
20/05/08 в 13:08
 Юнга
[url=http://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование]ООП[/url] и [url=http://ru.wikipedia.org/wiki/Класс_(программирование)]классы[/url] спасут детей русской демократии. icon_smile.gif

Ыыыю.. А че русские урлы низззя?
цитата
20/05/08 в 13:12
 Core
одна и та же мысль была выдана двумя человеками одновременно в 14:08 icon_smile.gif
ООП форева!
цитата
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();

Хотя ООП конечно рулит icon_smile.gif


Эта страница в полной версии