Нужно ли передавать по ссылке явно? - PullRequest
2 голосов
/ 02 июля 2011

например shuffle(&$array);

Не рекомендуется ли пропускать знак & при передаче аргумента в функции, подобные этой?Потому что и без него работает ...

Ответы [ 3 ]

4 голосов
/ 02 июля 2011

Вам не нужно передавать его;это неявно понимается как ссылка.Документация для этих типов функций показывает лишь то, что они не будут скопированы, а будут ссылаться.

2 голосов
/ 02 июля 2011

В PHP 5.3 это плохо, в более ранних версиях я полагаю, что на каком-то мета-способе это может помочь следующему человеку прочитать код, но, как правило, это не лучшая идея только потому, что на самом деле это не делайте что угодно, и большинство людей будут смущены его включением (почему этот человек делает это? Я не понимаю ...). & используется только четыре раза:

  • Назначение ссылки на переменную: $a =& $b (ссылки b)
  • параметры: function inc(&$b){$b++;} (b теперь будет увеличиваться за пределами func)
  • возвращает: function &get_thing(){ static $thing; return $thing; } (теперь вы можете изменить статическое значение)
  • Итерации: foreach($var as $key=>&$val){$val++;}
1 голос
/ 02 июля 2011

Нет, это не плохая практика.На самом деле, это хорошая практика.

Когда аргументы функций должны передаваться по ссылке, это должно быть указано в определении функции.Вы можете видеть, что это так на странице справки PHP для shuffle.

Передача по ссылке во время вызова (как, например, shuffle(&$arr)) - плохая практика.Начиная с версии PHP 5.3, он устарел и выдает предупреждение.Это связано с тем, что это может вызвать всевозможные странные проблемы, если функция не ожидает своего аргумента в качестве ссылки.

...