2010-04-23 62 views
0

如果我使用神奇的方法。在使用反射API時,我無法調查類屬性。爲什麼會這樣呢?魔法方法+反射API =不能調查類屬性。爲什麼?

編輯

什麼是反射API?請不要轉介我php.net我didnt諒解..引導我在你的話plsss

+0

您能否提供更多具體細節,以瞭解哪些功能無法正常工作?您如何嘗試實現? – Savageman 2010-04-23 11:30:57

+0

我正在閱讀一本書,說明了這一點,並將其標記爲Magic Method中的一個限制...這就是我所知道的所有... – 2010-04-23 11:33:19

回答

2

使用神奇的方法來訪問屬性,這些屬性通常不會出現在類的定義。

您的類的定義一般是這樣的:

class MyClass { 
    private $data; 
    public function __get($name) { 
     return $this->data[$name]; 
    } 
    public function __set($name, $value) { 
     $this->data[$name] = $value; 
    } 
} 


由於沒有不動產 - 只有一個$data陣列上,這將是由魔術方法__get使用一個__set作爲一個大型數據存儲 - 反射API無法看到這些數據。

這就是由於使用魔術方法的一個問題:它們被用來訪問屬性(或方法,以__call不屬於那裏 - 反射API只能看到那裏的東西。

+0

反轉並詢問關鍵詞「Reflecton API」whats基本上用於..而且它不符合你在上面指定的內容? – 2010-04-23 11:55:52

-2

一個可能的解決方案是增加$範圍的數據保護:

class MyClass { 
    protected $data; 
    public function __get($name) { 
     return $this->data[$name]; 
    } 
    public function __set($name, $value) { 
     $this->data[$name] = $value; 
    } 
} 

這種方式,因爲他們認爲合適和蒐集運行時定義的屬性擴展類可以訪問陣列。

相關問題