Не могу передать переменную по ссылке - PullRequest
2 голосов
/ 16 июня 2011

Я действительно запутался с этим.Вот мой код

class inner
{
    var $val = 0;   
}

class outer
{
    var $obj=null;

    function outer()
    {
        $this->obj = new inner;
    } 

    function get_obj()
    {
        return $this->obj;
    }
}


$app = new outer;

$obj = &$app->get_obj(); //get object by reference (& is not necessary in PHP5)
$obj->val = 1; //change something
echo $app->obj->val; //check whether it affected the original object source
//here it should display 1

Когда я тестирую это на своем локальном сервере, который является PHP 5.2.10-2ubuntu6.4, все работает нормально и отображает 1. Когда я тестирую это на PHP моего клиентаСервер версии 5.2.9, он отображает 0. Есть какая-то известная ошибка PHP или может быть какая-то настройка php.ini, которая может повлиять на это поведение?

Ответы [ 3 ]

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

PHP5 и выше передаст все объекты в качестве ссылки.Все остальное передается по значению.

Но это может быть не так, если включена определенная директива.Проверьте, активен ли zend.ze1_compatibility_mode в вашем php.ini.Взято из документации PHP:

[...] Влияет на клонирование, приведение типов (объекты без свойств приведены к FALSE или 0) и сравнение объектов.В этом режиме объекты передаются по значению вместо ссылки по умолчанию.

Надеюсь, что это решит проблему ...

1 голос
/ 16 июня 2011

Если не работает , попробуйте заменить это

function get_obj()

К этому

function &get_obj()

Полезные ссылки:
http://php.net/manual/en/language.references.pass.php http://php.net/manual/en/language.oop5.references.php

0 голосов
/ 16 июня 2011

Проверьте файл php.ini клиента, должно быть что-то подозрительное.Я ищу в Google, я не могу найти никаких ошибок, которые были у людей при вызове по ссылке на 5.2.9.

И, попробуйте предложение азата.

...