Возвращение двух значений как функции для двух разных переменных в php - PullRequest
0 голосов
/ 11 сентября 2011
function foo($a)
{
    $b = ...;
    $c = ...;
    return (both b and c);
}

и поэтому я могу получить $b значение до $first и $c значение до $second

Я знаю, что вы можете вернуть более 1 переменную на return array($b,$c), но тогда этодолжно быть $var[0] и $var[1], а затем мне нужно набрать $first = $var[0] и $second = $var[1] и поэтому я создаю больше бесполезных переменных

Так можно ли это сделать без массива?

Ответы [ 4 ]

2 голосов
/ 11 сентября 2011

Нет, не может.

Но вы все равно можете вернуть массив из функции, но используйте "список", чтобы принять результат для удобства:

list ($first, $second) = foo ($a);
2 голосов
/ 11 сентября 2011

По сути, функции имеют только одно возвращаемое значение. Вы можете вернуть класс с переменными-членами first и second или ассоциативный массив с ключами "first" и "second", но вы все равно будете возвращать только один объект. *

Кроме того, вы можете ссылаться на $first и $second в своей функции:

function foo($a, &$b, &$c)
{
    $b = ...;
    $c = ...;
}

foo(42, $first, $second);

Я не большой поклонник этого подхода, потому что с сайта вызова не сразу понятно, что $first и $second будут изменены.

* Обратите внимание, что если вы возвращаете массив, вы всегда можете использовать сокращение list($first,$second) = foo(42);.

1 голос
/ 11 сентября 2011

Нет, вы не можете к этому. Функция возвращает только один результат.

Что вы можете сделать, если это возможно в вашем случае, это передать переменную по ссылке.

function foo($a, &$b, &$c){
 $b = ...;
 $c = ...;
}

Следующее сделает изменения в $ b и $ c видимыми вне области действия функции.

0 голосов
/ 11 сентября 2011

Единственная альтернатива, чтобы избежать возврата массива, - это вернуть объект или сериализованные данные, но вы что-то не «выиграете» от этого.

...