2013-06-20 13 views
5

ho una classe comeRecupero solo le proprietà della classe figlia

class parent{ 
    public $foo; 
} 

class child extends parent{ 
    public $lol; 

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

e ottenere un array con le proprietà secondarie in esso per ...

array('foo','lol'); 

c'è una soluzione semplice per ottenere solo le proprietà dalla classe figlio?

risposta

3

Prova questo approccio (può contenere pseudo codice 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 
    } 
} 

L'idea che l'utilizzo di parent :: getParentFields function() per determinare quali campi era campi genitore.

+1

Ho iniziato a lavorare sulla stessa cosa, +1. Potrebbe essere necessario aggiungere la ricorsione. Puoi anche saltare la funzione genitore e usare semplicemente 'get_class_vars()' direttamente su 'get_parent_class()' OP: usa 'array_diff' per ottenere i campi figlio – Jessica

+0

Oppure, get_class_vars (parent) potrebbe funzionare solo :), lo sono anch'io pigro per provarlo :) –

+0

@ KemalDağ 'get_class_vars (parent)' non funziona perché PHP lo considera come una stringa letterale ''parent' 'quando lo passi a una funzione. – Achrome

4

come ha pubblicato un link per 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"; 
    } 
} 

È grande soluzione fino votato e inserito tra i preferiti! tuo!!! chi si è mai collegato a questo!

Problemi correlati