2013-06-20 12 views
5

Mam klasy jakOdzyskiwanie tylko właściwości klasy dziecięcej

class parent{ 
    public $foo; 
} 

class child extends parent{ 
    public $lol; 

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

i uzyskać tablicę z właściwości podrzędnych w nim ...

array('foo','lol'); 

istnieje proste rozwiązanie uzyskać tylko właściwości z klasy podrzędnej?

Odpowiedz

3

Spróbuj tego podejścia (może zawierać pseudo kod 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 
    } 
} 

Pomysł, że za pomocą parent :: getParentFields function(), aby określić, które pola to pola rodzica.

+1

Zacząłem pracować nad tym samym, +1. Może potrzebować dodać rekursję. Możesz także pominąć funkcję nadrzędną i po prostu użyć 'get_class_vars()' bezpośrednio na 'get_parent_class()' OP: użyj 'array_diff', aby uzyskać pola potomne – Jessica

+0

Lub, get_class_vars (parent) może po prostu zadziałać :), ja też jestem leniwy, aby go wypróbować :) –

+0

@ KemalDağ 'get_class_vars (parent)' nie działa, ponieważ PHP traktuje go jako literał "rodzica" podczas przekazywania go do funkcji. – Achrome

4

jak pisał w link do 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"; 
    } 
} 

Jest rozwiązanie GREAT się głosowanie i dodał do ulubionych! twój!!! który kiedykolwiek łączył się z tym!

Powiązane problemy