время
|
|
Глава 22. Ссылки. 6
в тех случаях, когда вы хотите использовать функцию для выбора переменной, с которой должна быть связана данная ссылка. При возвращении по ссылке используйте такой синтаксис:
<?php
function &find_var($param)
{
/* ... код ... */
return $found_var;
}
$foo =& find_var($bar);
$foo->x = 2;
?>
В этом примере устанавливается свойство объекта, возвращённого функцией find_var, а не его копии, как было бы без использования ссылок.
Замечание: В отличие от передачи параметров по ссылке, & здесь нужно использовать в обоих местах - для указания на то, что вы возвращаете ссылку, а не копию, как обычно, и для указания того, что происходит связывание по ссылке, а не обычное присвоение.
Сброс переменных-ссылок
При сбросе ссылки, просто разрывается связь имени и содержимого переменной. Это не означает, что содержимое переменной будет разрушено. Например:
<?php
$a = 1;
$b =& $a;
unset($a);
?>
Этот код не сбросит $b, а только $a.
Опять же, можно провести аналогию с вызовом unlink (в Unix).
Неявное использование механизма ссылок
Многие синтаксические конструкции PHP реализованы через механизм ссылок, поэтому всё сказанное выше о ссылочном связывании применимо также и к этим конструкциям. Некоторые конструкции, вроде передающих и возвращающих по ссылке, рассмотрены ранее. Другие конструкции, использующие ссылки:
Ссылки global
Если вы объявляете переменную как global $var, вы фактически создаёте ссылку на глобальную переменную. Это означает то же самое, что:
<?php
$var =& $GLOBALS["var"];
?>
Это значит, например, что сброс (unset) $var не приведёт к сбросу глобальной переменной.
$this
В методах объекта, $this всегда является ссылкой на вызывающий объект.