2010-10-10 21 views
4

Je sais que PHP5 vous permettra de parcourir les propriétés d'une classe. Toutefois, si la classe étend une autre classe, elle inclut également toutes les propriétés déclarées dans la classe parente. C'est bien et tout, pas de plaintes.Comment parcourez-vous les propriétés de classe actuelles (qui ne sont pas héritées d'un parent ou d'une classe abstraite)?

Cependant, j'ai toujours compris SELF comme pointeur vers la classe actuelle, alors que $ ce fait également l'objet en cours (y compris des choses hérité d'un parent)

Est-il possible que je peux itérer seulement par le courant les propriétés de la classe. Raison pour laquelle je pose cette question ... J'utilise CI et itératif à travers $ cela inclut des tonnes de propriétés parentales dont je n'ai pas besoin.

<?php 

class parent 
{ 
    public $s_parent = "Parent sez hi!"; 
    public $i_lucky_number = 6; 
} 

class child extends parent 
{ 
    public $s_child = "Child sez hi!"; 
    public $s_foobar = "What What!!"; 
    public $i_lucky_number = 7; 

    public iterate() 
    { 
     foreach ($this as $s_key => $m_val) 
     { 
      echo "$s_key => $m_val<br />\n"; 
     } 
    } 

} 

$o_child = new child(); 
$o_child->iterate() 

La sortie est

s_parent => Parent sez hi! 
s_child => Child sez hi! 
s_foobar => What What!! 
i_lucky_number => 7 

Je ne veux pas voir "s_parent => Parent sez salut!" Je veux juste parcourir les propriétés de la classe actuelle. Pas ceux hérités ailleurs.

Merci d'avance.

+0

Qu'en est-'variable' private $ en classe mère ?? !! –

Répondre

11

En utilisant les méthodes de réflexion, vous pouvez effectuer les opérations suivantes:

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"; 
    } 
} 
+0

Ça a l'air bien. Je n'ai pas encore eu le temps de le tester. Je reviendrais vers vous. – mrbinky3000