Используются они для:
1) Для передачи по значению в функцию.
2) Для создания юниксподобных твердых ссылок.
Примеры:
1)
function inc(&$var) {
$var++;
}
$a = 1;
inc($a);
echo $a; //2
$var++;
}
$a = 1;
inc($a);
echo $a; //2
2)
$a = 1;
$b =& $a;
$b=8;
echo $a; //8
3)
class MyClass {
public $var;
public &getVar() {return $this->var;}
}
$obj = new MyClass(); $out =& $obj->getVar(); // использование & в обоих местах обязательно
$out = 10;
echo $obj->var;//10
Интересности:
global $var;
//идентично
$var =& $GLOBALS['var'];
/*и нужно понимать, что это у нас ссылка. И меняя ссылку на другой обьект через это имя, мы не заставим остальные ссылки на этот обьект указывать на новый. Присто наша ссылка помяняла свое значение -- именно она узазывает на новый обьект.*/
$var = 5;
unset($var); // это просто разрушается наша ссылка, а ссылка $GLOBALS['var'] продолжает свое существование
/*обьект очищается сборщиком муссора только тогда, когда на него нет ни одной ссылки, поэтому значение в $GLOBALS['var'] будет продолжать существовать*/
echo $var;//NULL -- в этот момент будет создана новая переменнай и ей присвоено это значение
echo $GLOBALS['var'];//5
Комментариев нет:
Отправить комментарий