2012-10-01 231 views
1
魔术函数

我已经实现了神奇的功能__get()__set()导致错误

function __get($property) { 
     if(isset($this->$property)) { 
      return $this->$property; 
     } else { 
      return null; 
     } 
    } 

    function __set($property, $value) { 
     $this->$property = $value; 
    } 

下面的代码工作正常:

$connect->Hammer = "DoubleClawed"; 
echo $connect->Hammer; 

然而,当我跑我的一些单元测试,行:

$this->Id = (int) $configXML->ConfigurationFindResults->Configuration->Id; 

给我:

试图让非对象的属性

有一些工作之前,其他神奇的设置变量。我也使用非魔术方法测试了这个代码,它工作。为什么这条线将它关闭? ($configXML是一个SimpleXML对象)

+0

你确定每个在这个链条中的元素是一个对象(例如:'$ configXML','$ configXML-> ConfigurationFindResults','$ configXML-> ConfigurationFindResults->配置'等)?看到错误之前的一些代码也是有帮助的。 – NullUserException

+0

你确定整型转换没有立即运行吗?这将使它成为一个非对象。 – TheZ

+0

难道你的魔法功能至少有点多余? PHP已经以这种方式没有它们(在未设置的属性上返回null),例如:http://codepad.org/7tS7CfFG – NullUserException

回答

0

您的魔法__get__set看起来不错。 (我在我的应用程序中使用相同的代码)。

你的错误出现的形式$configXML->ConfigurationFindResults->Configuration->Id;

+0

如果我可能会问,为什么你在你的应用中使用相同的代码?没有它,它的工作原理是一样的:http://codepad.org/7tS7CfFG – NullUserException

+0

如何获得私人? – JvdBerg

+0

@JdvBerg如果你知道你会违反私人访问权限,那么你为什么要首先将其设置为私有? (这不是修辞,我真的很想知道这是什么用例) – NullUserException