2013-06-20 63 views
5

我有一個像僅檢索子類的屬性

class parent{ 
    public $foo; 
} 

class child extends parent{ 
    public $lol; 

    public function getFields() 
    { 
     return array_keys(get_class_vars(__CLASS__)); 
    } 
} 

一類,我得到它的孩子特性的陣列...

array('foo','lol'); 

有一個簡單的解決方案只得到子類中的屬性?

回答

3

試試這個辦法(可能含有僞PHP代碼:))

class parent{ 
    public $foo; 

    public function getParentFields(){ 
     return array_keys(get_class_vars(__CLASS__)); 
    } 
} 

class child extends parent{ 
    public $lol; 

    public function getFields() 
    { 
     $parentFields = parent::getParentFields(); 
     $myfields = array_keys(get_class_vars(__CLASS__)); 

     // just subtract parentFields from MyFields and you get the properties only exists on child 

     return the diff 
    } 
} 

的想法,使用父:: getParentFields()函數來確定哪些字段是父領域。

+1

我開始研究同樣的事情,+1。可能需要添加遞歸。你也可以跳過父函數,直接在'get_parent_class()'OP上直接使用get_class_vars():使用'array_diff'來獲取子字段 – Jessica

+0

或者get_class_vars(parent)可能正常工作:),我也是懶得試試:) –

+0

@KemalDağ'get_class_vars(parent)'不起作用,因爲PHP在將它傳遞給函數時認爲它是一個字符串文字''parent''。 – Achrome