Функции по ссылке или по переменной, когда использовать? - PullRequest
1 голос
/ 17 июня 2011

Ну, я прочитал в своей удобной книге по PHP, что очень важно уметь различать ссылочные и переменные параметры. В книге говорится, что исходное значение параметризованных переменных сохраняется при изменении переменной, а исходные значения параметризованных ссылок изменяются при изменении ссылки. Это говорит о том, что это ключевое различие, если я правильно читаю.

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

Ответы [ 2 ]

3 голосов
/ 17 июня 2011

Это довольно просто. Используйте ссылки, когда вам нужно изменить значение переменной, переданной в функцию. Используйте переменные, когда вам не нужно или вы хотите изменить значение.

Так, например, если вы пишете функцию, которая принимает массив и изменяет этот массив, вам лучше использовать ссылку на этот массив, а не возвращать новый массив из функции.

2 голосов
/ 17 июня 2011

«Ссылки» (псевдонимы переменных) затрудняют понимание вашего кода и могут стать источником трудных для отслеживания ошибок.Нет никаких веских причин использовать ссылки в php и быть на более безопасной стороне, стараясь их вообще избегать.

И нет, объекты в php5 не имеют ничего общего с "ссылками".

«Ссылки», реализованные в php, - странное понятие.Обычно в языках программирования переменные не зависят друг от друга, поэтому изменение одной переменной не влияет на другие.Php «ссылки» позволяют нескольким переменным иметь одинаковое значение и быть зависимыми друг от друга.По сути, вы меняете одну переменную, и вдруг другая, которая, по вашему мнению, совершенно не связана, тоже меняется.Это нехорошо и часто приводит к путанице.

Объекты в php (мне нужно добавить «пять»?) Не имеют ничего общего с «ссылками» в вышеприведенном смысле.Они ведут себя во многом как указатели C (на самом деле, это то, что они скрыты) - когда вы передаете объект в функцию, вы фактически передаете указатель, и функция может использовать этот указатель для манипулирования содержимым объекта, но нетспособ для функции изменить переданную переменную, например, заставить ее указать на другой объект.

Такое недопонимание "объекты - ссылки", вероятно, связано с тем, что люди путают "ссылки" php (синтаксис амперсанда) с общим термином CS *, который также применяется к указателям, дескрипторам и т. Д.

...