Уверен, это не устарело.Я много чего такого делал в PHP 5.3, в основном для псевдонима глубоко вложенного массива.Например:
$short = &$a['really']['deep']['array']
Когда вы делаете $a = $b
, а $a
является объектом, он создает «ссылку».Лучше всего это проиллюстрировать на примере:
>> $o = new stdClass()
stdClass::__set_state(array(
))
>> $o->a = 5
5
>> $o
stdClass::__set_state(array(
'a' => 5,
))
>> $o2 = $o
stdClass::__set_state(array(
'a' => 5,
))
>> $o2->a = 6
6
>> $o
stdClass::__set_state(array(
'a' => 6,
))
Обратите внимание, что теперь и $o->a
, и $o2->a
равны 6, хотя мы выполнили задание только для одного из них.
Когда$a
- это примитив (или скаляр в PHP), такой как string, int или float, он ведет себя немного по-другому;переменная копируется:
>> $a = 1
1
>> $b = $a
1
>> $b = 2
2
>> $a
1
Обратите внимание, что $a
по-прежнему равен 1.
Однако при использовании амперсанда он в основном работает как псевдоним.Любые изменения в одной переменной будут влиять на другую.
>> $c = 1
1
>> $d = &$c
1
>> $d = 2
2
>> $c
2
Обратите внимание, что $c
теперь равно 2.