передача PHP по разнице ссылок - PullRequest
0 голосов
/ 11 февраля 2012

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

function do_stuff(&$a)
{
    // do stuff here...
}

и сделайте это внутри функции как:

function do_stuff($a)
{
    $var = &$a;
    // do stuff here...
}

Каковы различия (если таковые имеются) между использованием этих двух ?. Кроме того, кто-нибудь может дать мне хороший учебник, который объясняет передачу по ссылке? Я не могу понять эту концепцию на 100%.

Спасибо

Ответы [ 4 ]

1 голос
/ 11 февраля 2012

В первом примере, если вы каким-либо образом измените $a внутри функции, будет изменено и исходное значение вне функции.

Во втором примере, что бы вы ни сделали для $a или его ссылки $var, не изменит исходное значение вне функции.

1 голос
/ 11 февраля 2012

Они совсем не эквивалентны.Во второй версии вы создаете ссылку на неопределенную переменную $a, в результате чего $var указывает на то же нулевое значение.Все, что вы делаете с $ var и $ a внутри второй версии, не повлияет ни на что вне функции.

В первой версии, если вы измените $ a внутри функции, новое значение будет присутствовать снаружи послефункция возвращает.

1 голос
/ 11 февраля 2012

Вот несколько примеров, чтобы вы могли видеть, что происходит с каждым из ваших вопросов.Я также добавил третью функцию, которая объединяет оба ваших вопроса, потому что она также даст другой результат.

function do_stuff(&$a)
{
    $a = 5;
}

function do_stuff2($a)
{
    $var = &$a;
    $var = 3;
}

function do_stuff3(&$a)
{
    $var = &$a;
    $var = 3;
}

$a = 2;
do_stuff($a);
echo $a;
echo '<br />';

$a = 2;
do_stuff2($a);
echo $a;
echo '<br />';

$a = 2;
do_stuff3($a);
echo $a;
echo '<br />';
0 голосов
/ 11 февраля 2012

Во второй функции $a, переданный в функцию, является копией переданного аргумента (если $ a не является объектом), поэтому вы делаете $var ссылку на $a внутрифункция, но она по-прежнему будет отделена от переменной, передаваемой в функцию.

Если вы используете последнюю версию PHP, объекты также автоматически передаются по ссылке, так что это может иметь значение.

...