Объекты в PHP переданы значением или ссылкой?

Я использую этого в VB.NET 2003, и он работает хорошо...

Private Function GetExcelColumnName(ByVal aiColNumber As Integer) As String
    Dim BaseValue As Integer = Convert.ToInt32(("A").Chars(0)) - 1
    Dim lsReturn As String = String.Empty

    If (aiColNumber > 26) Then
        lsReturn = GetExcelColumnName(Convert.ToInt32((Format(aiColNumber / 26, "0.0").Split("."))(0)))
    End If

    GetExcelColumnName = lsReturn + Convert.ToChar(BaseValue + (aiColNumber Mod 26))
End Function
19
задан Click Upvote 9 July 2009 в 23:49
поделиться

3 ответа

Почему бы не запустить функцию и не выяснить?

$b = new Bar;
echo $b->getFoo(5)->value;
$b->test();
echo $b->getFoo(5)->value;

Для меня приведенный выше код (вместе с вашим кодом) дал следующий результат:

Foo #5
My value has now changed

Это не из-за "передачи по ссылке ", однако это связано с" уступкой по ссылке ". В PHP 5 назначение по ссылке является поведением по умолчанию для объектов. Если вместо этого вы хотите назначать по значению, используйте ключевое слово clone .

27
ответ дан 30 November 2019 в 02:24
поделиться

Вы можете обратиться к http://ca2.php.net/manual/en/language.oop5.references.php для фактического ответа на ваш вопрос.

Один из ключевых моментов ООП PHP5, который часто упоминается, - это то, что «объекты по умолчанию передаются по ссылкам». Это не совсем так.

Ссылка PHP - это псевдоним, который позволяет двум различным переменным записывать одно и то же значение. Начиная с PHP5, объектная переменная больше не содержит сам объект как значение. Он содержит только идентификатор объекта, который позволяет средствам доступа к объекту находить реальный объект. Когда объект отправляется аргументом, возвращается или присваивается другой переменной, разные переменные не являются псевдонимами: они содержат копию идентификатора, который указывает на тот же объект.

21
ответ дан 30 November 2019 в 02:24
поделиться

Они передаются по значению в PHP 4 и по ссылке в PHP 5. Чтобы передавать объекты по ссылке в PHP 4, вы должны явно пометить их как таковые:

$obj = &new MyObj;
7
ответ дан 30 November 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: