Параметры функции php5 передаются как ссылки или как копии? - PullRequest
4 голосов
/ 02 июля 2010

Передаются ли параметры функции Php как ссылки на объект или как копия объекта?

Это очень ясно в C ++, но в Php5 я не знаю.

Пример:

<?php
$dom = new MyDocumentHTMLDom();
myFun($dom);

Является ли параметр $dom переданным как ссылка или как копия

Ответы [ 6 ]

9 голосов
/ 02 июля 2010

В PHP5 объекты передаются по ссылка .Ну, не совсем технически, потому что это копия - но переменные объекта в PHP5 хранят объект IDENTIFIER , а не сам объект, поэтому по сути это то же самое, что и передача по ссылке.Подробнее здесь: http://www.php.net/manual/en/language.oop5.references.php

1 голос
/ 02 июля 2010

В PHP5 по умолчанию объекты передаются по ссылке.

Вот одна запись блога, которая подчеркивает это: http://mjtsai.com/blog/2004/07/15/php-5-object-references/

1 голос
/ 02 июля 2010

Объекты всегда передаются по ссылке, поэтому любые изменения, внесенные в объект в вашей функции, отражаются в оригинале

Скаляры передаются по ссылке. Однако если вы измените скалярную переменную в своем коде, тогда PHP возьмет локальную копию и изменит ее ... если вы явно не использовали & для указания передачи по ссылке в определении функции, в этом случае модификация относится к оригиналу

1 голос
/ 02 июля 2010

Скопируйте, если вы не укажете, в вашем случае, &$dom в объявлении функции.

ОБНОВЛЕНИЕ

В OP, примером был объект.Мой ответ был общим и кратким. Томаш Стручиньски дал превосходный, более подробный ответ.

0 голосов
/ 25 декабря 2012

Это не имеет ничего общего с параметрами функции.PHP 5 имеет только указатели на объекты;у него нет «объектов» в качестве значений.Таким образом, ваш код эквивалентен этому в C ++:

MyDocumentHTMLDom *dom = new MyDocumentHTMLDom;
myFun(dom);

Теперь многие люди упоминают, что они передаются по значению или передаются по ссылке.Вы не спрашивали об этом в вопросе, но так как люди упоминают об этом, я буду говорить об этом.Как и в C ++ (поскольку вы упомянули, что вы знаете C ++), передача по значению или передача по ссылке определяется тем, как объявлена ​​функция.

Параметр передается по ссылке, если и только если он имеет &в объявлении функции:

function myFun(&$dom) { ... }

точно так же, как в C ++:

void myFun(MyDocumentHTMLDom *&dom) { ... }

Если этого не происходит, то оно передается по значению:

function myFun($dom) { ... }

простокак в C ++:

void myFun(MyDocumentHTMLDom *dom) { ... }
0 голосов
/ 02 июля 2010

в объектах php5, передаваемых по ссылке, в php4 и более ранних - по значению (копии) для передачи по ссылке в php4 необходимо установить & перед именем объекта

...