2010-11-05 6 views
2

Y at-il un moyen de créer un tableau contenant toutes les variables publiques d'une classe sans avoir à les ajouter manuellement dans PHP5?définir par programmation un tableau avec toutes les classes vars

Je cherche le meilleur moyen de séquentiellement définir un groupe de vars dans une classe

+0

connexes: [Comment trouver des propriétés publiques programatically d'une classe à l'intérieur de l'un de ses méthodes] (http://stackoverflow.com/q/13124072/367456) – hakre

Répondre

0

essayer get_class_vars($obj);

1

Jetez un oeil à PHP de Reflection API. Vous pouvez obtenir les propriétés avec ReflectionClass::getProperties.

Pour définir les propriétés que vous faites quelque chose comme ceci:

$propToSet = 'somePropName'; 
$obj->{$propToSet} = "newValue"; 
3

get_class_vars() est l'évidence un - voir get_class_vars docs sur le site PHP.

Modifier: exemple de configuration en utilisant cette fonction:

$foo = new Foo(); 
$properties = get_class_vars("Foo"); 
foreach ($vars as $property) 
{ 
    $foo->{$property} = "some value"; 
} 

Vous pouvez également utiliser l'API de réflexion - de la PHP docs:

<?php 
class Foo { 
    public $foo = 1; 
    protected $bar = 2; 
    private $baz = 3; 
} 

$foo = new Foo(); 

$reflect = new ReflectionClass($foo); 
$props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC); 

foreach ($props as $prop) { 
    print $prop->getName() . "\n"; 
} 

var_dump($props); 

?> 

... exemple pris directement à partir de PHP docs liés ci-dessus, mais modifié pour votre but de ne récupérer que les propriétés publiques. Vous pouvez filtrer sur public, protégé etc comme requis.

Ceci retourne un tableau de ReflectionProperty objets qui contiennent le nom et la classe selon le cas.

Modifier: exemple de configuration en utilisant le tableau ci-dessus $props:

$props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC); 
foreach ($props as $prop) 
{ 
    $foo->{$prop->getName()} = "some value"; 
} 
+0

Puis-je définir des propriétés, dans la définition de classe, en utilisant cette méthode? –

Questions connexes