Разъяснение руководства по PHP;значения по умолчанию, переданные по ссылке - PullRequest
5 голосов
/ 07 сентября 2011

Из-за несоответствий в руководстве по PHP (, о котором я писал ранее ), я просто спрашиваю о некоторых пояснениях.

Страница Аргументы функций Страница(http://ca2.php.net/manual/en/functions.arguments.php) имеет следующее примечание:

Примечание : Начиная с PHP 5, значения по умолчанию могут передаваться по ссылке.

Теперь, я предполагаю, что это просто означает, что следующий синтаксис является приемлемым:

function foo(&$bar = null){
    // ...
}

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

Ответы [ 3 ]

4 голосов
/ 20 марта 2014

Это означает, что в PHP 4 использование значения по умолчанию для аргументов, передаваемых по ссылке, приведет к ошибке разбора:

Parse error: syntax error, unexpected '=', expecting ')' in ...

Демо

В PHP5, когда аргумент не передается, ваша функция будет иметь обычную локальную переменную с именем $bar, инициализированную на null.

Вероятно, следует изменить на:

Примечание: Начиная с PHP 5, объявления функций могут определять значение по умолчанию для аргумента, передаваемого по ссылке.

4 голосов
/ 07 сентября 2011

это означает, что когда вы изменяете бар

$bar = "newvalue";

в функции, старая (оригинальная) тоже будет затронута

<?php
function foo(&$bar = null){
    $bar = 'newval';
}

$bar = 'oldval, will be changed';
foo($bar);
echo $bar; //RETURNS newval

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

1008 *http://sandbox.phpcode.eu/g/51723
0 голосов
/ 20 марта 2014

Я думаю, что единственная причина, по которой это существует, - это возможность пропустить конечные параметры при вызове функции

function test(&$bar = 10)
{
    echo " '$bar' ";
    $bar = $bar*2;
    echo " '$bar' ";
}

test($aaa);     // prints '' '0'     (NULL as string, NULL*2)
echo $aaa;      // prints 0          ($aaa is set to NULL*2)
echo "<br>";

$bbb = 6;
test($bbb);     // prints '6' '12'   (6, 6*2)
echo $bbb;      // prints 12         ($bbb is set to 6*2)
echo "<br>";

test();        // prints '10' '20'
// (uses the default value since the argument was skipped, so: 10, 10*2)

Итак, причина, по которой это существует, - это просто возможность иметь $ bar установлен на некоторое значение по умолчанию внутри области функции когда вы пропускаете ведущий параметр в вызове функции

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...