2010-04-12 5 views

Répondre

1

Question très intéressante.

Je vous recommande fortement de lire les exemples ici - http://dsl093-056-122.blt1.dsl.speakeasy.net/edu/oreilly/Oreilly_Web_Programming_bookshelf/webprog/php/ch06_05.htm ils vous donneront un meilleur aperçu de l'introspection. La référence au sujet de ces méthodes est ici - http://www.php.net/manual/en/ref.classobj.php


Voici la fonction avec un test. Cela fonctionnera seulement en PHP 5+ car il utilise Reflection qui n'était pas disponible auparavant. Vous pouvez en savoir plus sur la réflexion ici - http://www.php.net/manual/en/class.reflectionclass.php

<?php 

echo '<pre>'; 

class A { 
    public $pub_a = 'public a'; 
    private $priv_a = 'private a'; 
} 

class B extends A { 
    public $pub_b = 'public b'; 
    private $priv_b = 'private b'; 
} 

$b = new B(); 

print_r(getChildrenProperties($b)); 

function getChildrenProperties($object) { 
    $reflection = new ReflectionClass(get_class($object)); 
    $properties = array(); 

    foreach ($reflection->getProperties() as $k=>$v) { 
     if ($v->class == get_class($object)) { 
      $properties[] = $v; 
     } 
    } 

    return $properties; 
} 
+0

un petit hack mais le code a fonctionné. merci d'y avoir creusé! –

1

Vous pouvez également essayer d'utiliser PHP Réflexion http://php.net/manual/en/book.reflection.php

Je suppose que ce que vous pouvez faire en utilisant la réponse est Sabev @ Ivo:

$properties = get_class_vars(ChildClass); 
$bproperties = get_class_vars(ParentClass); 

Et Maintenant, parcourez toutes les propriétés $ qui n'apparaissent pas dans $ bproperties.

+0

Ouais c'est l'idée, mais ces fonctions ne vous donnent pas les propriétés privées. Je ne regarde pas le ReflectionClass et pourrait écrire une petite fonction pour faire l'affaire. –

Questions connexes