Есть ли необходимость передавать переменную по ссылке в php5? - PullRequest
0 голосов
/ 20 мая 2009

Если в PHP5 используется «копирование при записи» и передача по ссылке, что приводит к большей потере производительности, чем выигрыш, почему я должен использовать передачу по ссылке? Кроме функций обратного вызова, которые возвращают более одного значения, или классов, атрибуты которых вы хотите изменить, не вызывая функцию set позже (я знаю, что это плохая практика), есть ли какое-то использование, которое я пропускаю?

Ответы [ 3 ]

3 голосов
/ 20 мая 2009

Вы используете передачу по ссылке, когда хотите изменить результат, и это все, что нужно.

Помните также, что в PHP объекты всегда передача по ссылке.

Лично я нахожу PHP-систему копирования значений неявным образом (я думаю, что она защищает от случайного изменения) громоздкой и не интуитивно понятной, но потом я снова начал использовать строго типизированные языки, что, вероятно, объясняет это. Но мне интересно, что объекты отличаются от обычной работы PHP, и я принимаю это как доказательство того, что механизм неявного копирования PHP действительно не является хорошей системой.

2 голосов
/ 20 мая 2009

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

Нет смысла иметь сотни копий частично заполненного массива и копировать, объединять и соединять части на каждом шагу.

0 голосов
/ 21 мая 2009

Даже при прохождении объектов есть разница.

Попробуйте этот пример:

class Penguin { }

$a = new Penguin();

function one($a)
{
  $a = null;
}

function two(&$a)
{
  $a = null;
}

var_dump($a);
one($a);
var_dump($a);
two($a);
var_dump($a);

Результат будет:

object(Penguin)#1 (0) {}
object(Penguin)#1 (0) {}
NULL

Когда вы передаете переменную, содержащую ссылку на объект по ссылке, вы можете изменить ссылку на объект.

...