Хорошо, я прочитал в своей удобной книге PHP, что очень важно иметь возможность различать ссылочные и переменные параметры. В книге говорится, что исходное значение параметризованных переменных сохраняется при изменении переменной, а исходные значения параметризованных ссылок изменяются при изменении ссылки. В нем говорится, что это ключевое различие, если я правильно читаю.
Ну, мне интересно, когда каждый из них более полезен, чем другой. Как узнать, когда использовать переменные и когда использовать ссылки, когда я создаю свои собственные функции?
«Ссылки» (переменные псевдонимы) делают ваш код более сложным для понимания и могут стать источником трудных ошибок. Нет никаких веских оснований использовать ссылки в php и быть на более безопасной стороне, чтобы избежать их вообще.
И нет, объекты в php5 не имеют никакого отношения к «ссылкам».
«Ссылки», реализованные в php, являются странной концепцией. Обычно в языках программирования переменные независимы друг от друга, поэтому изменение одной переменной не влияет на других. Php «ссылки» позволяют нескольким переменным делиться одним и тем же значением и быть зависимыми друг от друга. В принципе, вы меняете одну переменную, и вдруг меняется другая, которая, по вашему мнению, совершенно не связана, тоже меняется. Это нехорошо и часто приводит к большой путанице.
Объекты в php (мне нужно добавить «пять»?) Не имеют никакого отношения к «ссылкам» в указанном выше смысле. Они ведут себя как C-указатели (на самом деле это то, что они находятся под капотом) – когда вы передаете объект функции, вы фактически передаете указатель, и функция может использовать этот указатель для управления содержимым объекта, но нет путь для функции для изменения самой переданной переменной, например, чтобы она указывала на другой объект.
Эти «объекты являются ссылками» недоразумения, вероятно, потому, что люди путают php «ссылки» (синтаксис амперсандов) с общим термином CS , который также применяется к указателям, дескрипторам и т. Д.
Это довольно просто. Используйте ссылки, когда вам нужно изменить значение переменной, переданной функции. Используйте переменные, если вам не нужно или хотите изменить значение.
Так, например, если вы пишете функцию, которая принимает массив и меняет этот массив, вам лучше использовать ссылку для этого массива, а не возвращать новый массив из этой функции.