2010-01-07 20 views
5

no puedo usar simplemente get_class_vars() porque necesito que funcione con la versión de PHP anteriores a 5.0.3 (ver http://pl.php.net/get_class_vars de cambios)¿Cómo obtener propiedades públicas de una clase?

alternativa: ¿Cómo puedo comprobar si la propiedad es pública?

+0

creo que esto sólo sería un problema en PHP 5.0.2. En PHP 5.0.1 y versiones anteriores, las propiedades protegidas y privadas se devuelven, pero con el prefijo nulo ('\ x00') que se puede excluir con una expresión regular. – MrWhite

Respuesta

7

Esto es posible mediante el uso de la reflexión.

<?php 

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

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

el resultado es:

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

) 
3

O usted puede hacer esto:

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

Usted puede hacer que su clase implementa la interfaz 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>"; 
} 

Esta es la salida :

PublicVar01 = Value01 
PublicVar02 = Value02  
Cuestiones relacionadas