2013-06-20 9 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_class_vars()' непосредственно на 'get_parent_class()' OP: использовать 'array_diff' для получения дочерних полей – Jessica

+0

Или, get_class_vars (parent) может просто работать :), я тоже ленив, чтобы попробовать :) –

+0

@ KemalDağ 'get_class_vars (parent)' не работает, потому что PHP рассматривает его как строковый литерал '' parent'', когда вы передаете его функции. – Achrome

4

, как писал в ссылке на 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"; 
    } 
} 

Он проголосовал GREAT решение и добавили в избранное! твой !!! которые когда-либо связывались с этим!

Смежные вопросы