2010-02-05 7 views
4

Je suis sûr que je pourrais trouver cela sur PHP.net si seulement je savais quoi chercher! Fondamentalement, j'essaie de faire défiler toutes les variables publiques à l'intérieur d'une classe.Comment savoir si une variable est publique ou privée dans une classe PHP?

Pour simplifier les choses:

<?PHP 
class Person 
{ 
    public $name = 'Fred'; 
    public $email = '[email protected]'; 
    private $password = 'sexylady'; 

    public function __construct() 
    { 
    foreach ($this as $key=>$val) 
    { 
     echo "$key is $val \n"; 
    } 
    } 
} 

$fred = new Person; 

devrait juste afficher le nom de Fred et e-mail ....

Répondre

6

Utilisez Reflection. J'ai modifié un exemple du manuel PHP pour obtenir ce que vous voulez:

class Person 
{ 
    public $name = 'Fred'; 
    public $email = '[email protected]'; 
    private $password = 'sexylady'; 

    public function __construct() 
    { 
    $reflect = new ReflectionObject($this); 
    foreach ($reflect->getProperties(ReflectionProperty::IS_PUBLIC) as $prop) 
    { 
     $propName = $prop->getName(); 
     echo $this->$propName . "\n"; 
    } 
    } 
} 
+0

Cool, je ne l'ai pas encore heared de cela auparavant. +1 Cependant, avez-vous des connaissances sur les performances de cette classe par rapport à quelque chose comme get_class_vars? – Boldewyn

+0

Pourquoi googler, quand la réponse est déjà sur SO: http://stackoverflow.com/questions/294582/php-5-reflection-api-performance – Boldewyn

+0

Ah merci, pas entendu parler de lui - bien que, comme Boldewyn, je ' m un peu inquiet au sujet des problèmes de performance! – watermanio

0

http://php.net/manual/en/function.get-class-vars.php

Vous pouvez utiliser la fonction get_class_vars():

<?php 
class Person 
{ 
    public $name = 'Fred'; 
    public $email = '[email protected]'; 
    private $password = 'sexylady'; 

    public function __construct() 
    { 
     $params = get_class_vars(__CLASS__); 
     foreach ($params AS $key=>$val) 
     { 
      echo "$key is $val \n"; 
     } 
    } 
} 
?> 
+1

Merci pour le lien, cependant que l'utilisation révèle vars privé ... – watermanio

Questions connexes