2012-10-01 238 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