Есть ли необходимость передавать переменную по ссылке в PHP5?
-
23-08-2019 - |
Вопрос
С помощью PHP5 используется «Копировать на записи» и проходить через ссылку, вызывая больше штрафа на производительность, чем усиление, почему я должен использовать пропусков? Помимо функций ответа вызовов, которые возвращают более одного значения или классов, а атрибуты, которые вы хотите изменить, не вызывая установленную функцию позже (плохая практика, я знаю), есть ли для нее использование, которое я не упускаю?
Решение
Вы используете пропусков, когда хотите изменить результат, и это все, что нужно.
Помните также, что в объектах PHP всегда прохождение по ссылке.
Лично я считаю, что система PHP неявно (я предполагаю защищать от случайных модификаций) громоздкой и неинтуитивной, но с другой стороны, я начал на сильно напечатанных языках, что, вероятно, объясняет это. Но мне интересно, что объекты отличаются от нормальной работы PHP, и я считаю, что неявный механизм копирования PHP действительно не является хорошей системой.
Другие советы
Рекурсивная функция, которая заполняет массив? Помните, что писал что -то подобное, один раз.
Нет смысла иметь сотни копий частично заполненного массива и копирования, сплайсинга и соединения деталей на каждом шагу.
Даже при прохождении объектов есть разница.
Попробуйте этот пример:
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
Когда вы передаете переменную, содержащую ссылку на объект по ссылке, вы можете изменить ссылку на объект.