无法通过引用传递变量

时间:2011-06-16 09:36:06

标签: php oop reference pass-by-reference

我真的很困惑这个。这是我的代码

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 个答案:

答案 0 :(得分:2)

PHP5及以上版本将所有对象作为参考传递。其他一切都是通过价值传递的。

但如果启用了某个指令,情况可能并非如此。检查php.ini中的zend.ze1_compatibility_mode是否处于活动状态。取自PHP文档:

  

[...]它影响克隆,转换(没有属性转换为FALSE或0的对象)以及对象的比较。在此模式下,默认情况下,对象按值而不是引用传递。

希望这能解决问题...

答案 1 :(得分:1)

如果无效,请尝试替换此

function get_obj()

通过这个

function &get_obj()

有用的链接:
http://php.net/manual/en/language.references.pass.php http://php.net/manual/en/language.oop5.references.php

答案 2 :(得分:-1)

检查客户端的php.ini文件,有些东西可疑。我在google上搜索,我找不到人们在5.2.9上通过引用打电话的任何错误。

并且,尝试azat的建议。