2013-06-20 37 views
5

Tôi có một lớp nhưLấy chỉ thuộc tính của lớp con

class parent{ 
    public $foo; 
} 

class child extends parent{ 
    public $lol; 

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

và tôi nhận được một mảng với các thuộc tính con ở trong đó để ...

array('foo','lol'); 

là có một giải pháp đơn giản để chỉ nhận được các thuộc tính từ lớp con?

Trả lời

3

Hãy thử phương pháp này (có thể chứa pseudo code 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 
    } 
} 

Ý tưởng cho rằng sử dụng parent :: getParentFields() chức năng để xác định các lĩnh vực là lĩnh vực mẹ.

+1

Tôi bắt đầu làm việc trên cùng một điều, +1. Có thể cần thêm đệ quy. Bạn cũng có thể bỏ qua hàm cha và chỉ sử dụng 'get_class_vars()' trực tiếp trên 'get_parent_class()' OP: use 'array_diff' để lấy các trường con – Jessica

+0

Hoặc, get_class_vars (parent) có thể chỉ hoạt động :), tôi cũng vậy lười biếng để thử nó :) –

+0

@ KemalDağ 'get_class_vars (cha mẹ)' không hoạt động vì PHP coi nó như là một chuỗi chữ ''parent'' khi bạn chuyển nó vào một hàm. – Achrome

4

như được đăng trong liên kết để How do you iterate through current class properties (not inherited from a parent or abstract class)?

public function iterate() 
{ 
    $refclass = new ReflectionClass($this); 
    foreach ($refclass->getProperties() as $property) 
    { 
    $name = $property->name; 
    if ($property->class == $refclass->name) 
     echo "{$property->name} => {$this->$name}\n"; 
    } 
} 

Nó là rất tốt giải pháp lên bình chọn và yêu thích! của mầy!!! ai đã từng liên kết với cái này!

Các vấn đề liên quan