2016-09-19 4 views
1

Я просто заметил следующее поведение в моем PHP-коде, и мне интересно, почему это происходит.PHP - Передача по ссылке подавляет неопределенную ошибку индекса?

$array = array(); 

test_value($array['invalid_index']); // Error -> Notice: Undefined index: invalid_index in ... 
test_reference($array['invalid_index']); //No error 

function test_value($value){} 
function test_reference(&$value){} 

Я ожидал, как test_value и test_reference бросить неопределенную ошибку индекса, но странно метод по ссылке не бросает какую-то ошибку.

Почему?

ответ

5

Параметры параметров по ссылке принимают переменные, которые не были объявлены ранее; они объявляются путем передачи их в качестве ссылки. Это имеет полный смысл, если вы посмотрите на типичные случаи использования передаваемых по ссылке параметров:

$foo = preg_match('/(.)/', 'bar', $baz); 

Эта функция возвращает одно значение, которое будет присвоен $foo. Однако эта функция также должна возвращать совпадения, которые здесь являются третьим параметром $baz. Так как функция может только return по одному значению за раз, дополнительные значения «возврата» реализуются путем заполнения переменных, передаваемых по ссылке.

Если бы вам пришлось предварительно инициализировать эти переменные, ваш код будет выглядеть следующим образом:

$baz = null; 
$foo = preg_match('/(.)/', 'bar', $baz); 
echo $baz[0]; 

Это делает код более сложным, чем это необходимо; Поэтому PHP не требует, чтобы такие переменные «существовали» заранее.

Смежные вопросы