Looking for php Keywords? Try Ask4Keywords

PHP Пропустить по ссылке


пример

Это позволяет передавать переменную по ссылке на функцию или элемент, который позволяет изменять исходную переменную.

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

  • Новые утверждения, например foo(new SomeClass)
  • Ссылки, возвращаемые функциями

Массивы

Обычное использование «передачи по ссылке» заключается в изменении начальных значений в массиве без необходимости создания новых массивов или засорения вашего пространства имен. Передача по ссылке так же проста, как предыдущая / префиксная переменная с помощью & => &$myElement .

Ниже приведен пример использования элемента из массива и просто добавление 1 к его начальному значению.

$arr = array(1, 2, 3, 4, 5);

foreach($arr as &$num) {
    $num++;
}

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

print_r($arr);

Заметка

Вы должны обратить внимание при использовании прохода по ссылке в цикле. В конце вышеприведенного цикла $num все еще содержит ссылку на последний элемент массива. Назначение этого цикла post приведет к обработке последнего элемента массива! Вы можете убедиться, что это не происходит, если unset() «после него»:

$myArray = array(1, 2, 3, 4, 5);

foreach($myArray as &$num) {
   $num++;
}
unset($num);

Вышеупомянутое гарантирует, что вы не столкнетесь с какими-либо проблемами. Пример проблем, которые могут быть связаны с этим, присутствует в этом вопросе в StackOverflow .


функции

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

$var = 5;
// define
function add(&$var) {
    $var++;
}
// call
add($var);

Который может быть проверен echo исходной переменной.

echo $var;

Существуют различные ограничения по функциям, как указано ниже в документах PHP:

Примечание. В вызове функции нет ссылочного знака - только для определения функций. Определений функций достаточно, чтобы правильно передать аргумент по ссылке. Начиная с PHP 5.3.0, вы получите предупреждение о том, что «call-time-pass-by-reference» устарело, когда вы используете & in foo (& $ a) ;. А с PHP 5.4.0 удаленный вызов был удален, поэтому его использование приведет к фатальной ошибке.