我真的很困惑这个。这是我的代码
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设置?
答案 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的建议。