Переменные PHP передаются по значению или по ссылке?
php
variables
pass-by-reference
pass-by-value
cmcculloh
источник
источник
Ответы:
Это по стоимости в соответствии с документацией PHP .
источник
$str = add_some_extra($str);
если бы я не использовал ссылку, верно? тогда какова реальная добавленная стоимость этого?$str
в вашем случае ей будет присвоен ноль.В PHP по умолчанию объекты передаются как ссылочная копия в новый объект.
Посмотрите этот пример .............
Теперь посмотри на это ..............
Теперь посмотри на это ..............
Я надеюсь, что вы можете понять это.
источник
$y
в этом нет необходимости - нет ничего,function changeValue
что требовало бы, чтобы оно было внутриclass Y
, чтобы объединить два не связанных между собой понятия. Я бы переместилсяfunction changeValue
во внешнюю сферу, чуть выше$x = new X();
. Удалить все ссылки на$y
. Теперь легче увидеть, что первые два примера оставляют $ x в покое, а третий меняет свое содержимое наnew Y()
. Какой бы легче увидеть , если вы выбросилиtype
из$x
- за того , что , какX
иY
случается, включают в себя$abc
поле также не имеет отношения к тому , что показаноКажется, многие люди смущаются тем, как объекты передаются в функции и что означает передача по ссылке. Переменные объекта по-прежнему передаются по значению, просто значение, которое передается в PHP5, является дескриптором ссылки. Как доказательство:
Выходы:
Для передачи по ссылке мы можем изменить переменные, которые видит вызывающий. Который явно код выше не делает. Нам нужно изменить функцию подкачки на:
Выходы:
чтобы перейти по ссылке.
источник
swap
функции; другими словами, если объекты были «переданы по значению». С другой стороны, это именно то, что вы ожидаете, если дескриптор объекта будет передан функции, что на самом деле и происходит. Ваш код не различает эти два случая.http://www.php.net/manual/en/migration5.oop.php
источник
Переменные PHP присваиваются по значению, передаются в функции по значению, а когда содержат / представляют объекты, передаются по ссылке. Вы можете принудительно передать переменные по ссылке, используя &
Назначено по значению / справочному примеру:
будет выводить
Передано по стоимости / справочный экзамен:
будет выводить:
Переменные объекта, переданные по ссылке
Будет вывод:
(последний пример мог бы быть лучше ...)
источник
$foo
является указателем на объект .$foo
будет передаваться по значению функцииchangeFoo()
, аchangeFoo()
не объявить его параметр с&
.Вы можете передать переменную в функцию по ссылке. Эта функция сможет изменять исходную переменную.
Вы можете определить переход по ссылке в определении функции:
источник
Вы можете сделать это в любом случае.
поместите символ «&» перед собой, и переменная, которую вы передаете, становится такой же, как и ее источник. То есть: вы можете передать по ссылке, а не сделать его копию.
так
источник
Переменные, содержащие примитивные типы, передаются по значению в PHP5. Переменные, содержащие объекты, передаются по ссылке. В Linux Journal от 2006 года есть довольно интересная статья, в которой упоминается это и другие различия между 4 и 5.
http://www.linuxjournal.com/article/9170
источник
&
.Объекты передаются по ссылке в PHP 5 и по значению в PHP 4. Переменные по умолчанию передаются по значению!
Читайте здесь: http://www.webeks.net/programming/php/ampersand-operator-used-for-assigning-reference.html
источник
&
.&
перед параметрами в определении - если они были переданы по значению, объект, содержащийся в области видимости, который вызвал функцию с этим параметром, не быть затронутым.Атрибуты по-прежнему можно изменять, если они не передаются по ссылке, поэтому будьте осторожны.
Вывод:
SwapObjects: b, a SwapValues: a, b
источник
Для тех, кто сталкивается с этим в будущем, я хочу поделиться этим драгоценным камнем из документов PHP, опубликованных анонимным пользователем :
И вот пример, который они предоставляют:
Я написал обширный, подробный пост в блоге на эту тему для JavaScript , но я полагаю, что он одинаково хорошо применим к PHP, C ++ и любому другому языку, где люди, похоже, не понимают передачу по значению по сравнению с передачей по ссылке.
Очевидно, что PHP, как и C ++, является языком, который поддерживает передачу по ссылке. По умолчанию объекты передаются по значению. При работе с переменными, которые хранят объекты, это помогает видеть эти переменные как указатели (потому что это на самом деле то, чем они являются на уровне сборки). Если вы передаете указатель по значению, вы все равно можете «проследить» указатель и изменить свойства объекта, на который указывает указатель. То, что вы не можете сделать, это указать на другой объект. Только если вы явно объявите параметр как переданный по ссылке, вы сможете сделать это.
источник
На самом деле оба метода действительны, но это зависит от ваших требований. Передача значений по ссылке часто замедляет выполнение сценария. Поэтому лучше передавать переменные по значению, учитывая время выполнения. Кроме того, поток кода более согласован, когда вы передаете переменные по значению.
источник
Используйте это для функций, когда вы хотите просто изменить исходную переменную и вернуть ее снова к тому же имени переменной с назначенным ей новым значением.
источник
Зависит от версии, 4 по значению, 5 по ссылке.
источник