2010-01-07 5 views
5

Je ne peux pas utiliser simplement parce que je get_class_vars() besoin de travailler avec la version PHP avant 5.0.3 (voir http://pl.php.net/get_class_vars Changelog)Comment obtenir les propriétés publiques d'une classe?

Autre possibilité: Comment puis-je vérifier si la propriété est publique?

+0

Je pense que cela ne serait qu'un problème dans PHP 5.0.2. En PHP 5.0.1 et versions antérieures, les propriétés privées et protégées sont renvoyées mais préfixées avec l'octet nul ('\ x00') qui peut être exclu avec une regex. – MrWhite

Répondre

7

Ceci est possible en utilisant la réflexion.

<?php 

class Foo { 
    public $alpha = 1; 
    protected $beta = 2; 
    private $gamma = 3; 
} 

$ref = new ReflectionClass('Foo'); 
print_r($ref->getProperties(ReflectionProperty::IS_PUBLIC)); 

le résultat est:

Array 
(
    [0] => ReflectionProperty Object 
     (
      [name] => alpha 
      [class] => Foo 
     ) 

) 
3

Ou vous pouvez faire ceci:

$getPublicProperties = create_function('$object', 'return get_object_vars($object);'); 
var_dump($getPublicProperties($this)); 
1

Vous pouvez faire de votre classe implémente l'interface IteratorAggregate

class Test implements IteratorAggregate 
{ 
    public PublicVar01 = "Value01"; 
    public PublicVar02 = "Value02"; 
    protected ProtectedVar; 
    private PrivateVar; 

    public function getIterator() 
    { 
     return new ArrayIterator($this); 
    } 
} 


$t = new Test() 
foreach ($t as $key => $value) 
{ 
    echo $key." = ".$value."<br>"; 
} 

Cette Affichera :

PublicVar01 = Value01 
PublicVar02 = Value02  
Questions connexes