Является ли передача переменных по ссылке устаревшей? - PullRequest
5 голосов
/ 26 ноября 2011

Существует комментарий к ответу к SO:

Код ответа:

$larry = & $fred;

Комментарий:

Это устарело и выдает предупреждение

Но я не думаю, что это правильно.Или это так?

Так что в основном вопрос такой:

Могу ли я скопировать переменную в другую переменную по ссылке?

Ответы [ 3 ]

7 голосов
/ 26 ноября 2011

Зависит от типа переменной $fred.Если это объект, он будет передан как ссылка , указатель на объект (спасибо NikiC) будет передан как значение в любом случае, начиная с PHP 5, поэтому нет необходимости явно делать это.Пока что комментарий корректный.

Однако для всех других типов переменных передача по ссылке должна быть явно указана и не должна быть устаревшей.Хотя можно утверждать, что использование PHP-ссылок в PHP обычно не является хорошей практикой программирования.

2 голосов
/ 26 ноября 2011

Уверен, это не устарело.Я много чего такого делал в 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.

0 голосов
/ 26 ноября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...