99 votes

Comment imprimer toutes les propriétés d'un objet

J'ai un objet inconnu dans la page php.

Comment puis-je l'imprimer/échouer, afin de voir quelles propriétés/valeurs il possède ?

Qu'en est-il des fonctions ? Y a-t-il un moyen de savoir quelles sont les fonctions d'un objet ?

4 votes

(@Brad Lowry veut partager quelque chose avec vous. J'ai copié son texte littéralement, sans avoir contribué de quelque manière que ce soit à son contenu) : Il y a sont deux différences entre print_r() y var_dump() . var_dump() peut prendre plusieurs $expression paramètres (pas de problème). Cependant, print_r() a un paramètre facultatif $return qui a la valeur FALSE par défaut, mais peut être définie à TRUE, ce qui fait que la fonction "renvoie" le résultat plutôt que de simplement l'exprimer. Cela peut s'avérer très utile si vous souhaitez collecter les données de la fonction print_r() et l'exprime ensuite dans un "bloc" de développement au bas de votre sortie.

0 votes

@varocarbas, "mais peut être mis à VRAI" <-- thx pour cela.

0 votes

@Coisox Honnêtement, je ne me souviens même pas des raisons exactes pour lesquelles j'ai écrit cela (je suppose que quelqu'un sans réputation suffisante a essayé de partager ces idées en postant une nouvelle réponse, que j'ai supprimée dans le cadre de mes fonctions de modération), mais il est clair que vous devriez remercier Brad Lowry plutôt que moi. Même sans me souvenir de ce moment exact et en ignorant ma référence claire à l'auteur réel, je peux vous dire que je n'ai écrit aucune partie de ce texte avec certitude.

138voto

Peter Ajtai Points 26377
<?php var_dump(obj) ?>

ou

<?php print_r(obj) ?>

Ce sont les mêmes choses que vous utilisez pour les tableaux aussi.

Ceux-ci montreront les propriétés protégées et privées des objets avec PHP 5. Les membres statiques des classes ne seront pas montrés selon le manuel.

Si vous voulez connaître les méthodes des membres, vous pouvez utiliser get_class_methods() :

$class_methods = get_class_methods('myclass');
// or
$class_methods = get_class_methods(new myclass());
foreach ($class_methods as $method_name) 
{
    echo "$method_name<br/>";
}

Des trucs connexes :

get_object_vars()

get_class_vars()

get_class() <-- pour le nom de l'instance

22voto

felipsmartins Points 1525

Comme personne n'a encore proposé une approche de l'API Reflection, voici comment procéder.

class Person {
    public $name = 'Alex Super Tramp';

    public $age = 100;

    private $property = 'property';
}

$r = new ReflectionClass(new Person);
print_r($r->getProperties());

//Outputs
Array
(
    [0] => ReflectionProperty Object
        (
            [name] => name
            [class] => Person
        )

    [1] => ReflectionProperty Object
        (
            [name] => age
            [class] => Person
        )

    [2] => ReflectionProperty Object
        (
            [name] => property
            [class] => Person
        )

)

L'avantage d'utiliser la réflexion est que vous pouvez filtrer par visibilité de la propriété, comme ceci :

print_r($r->getProperties(ReflectionProperty::IS_PRIVATE));

Desde Personne::$property est privé, il est renvoyé lors du filtrage par IS_PRIVATE :

//Outputs
Array
(
    [0] => ReflectionProperty Object
        (
            [name] => property
            [class] => Person
        )

)

Lisez la documentation !

8voto

meder Points 81864
var_dump($obj); 

Si vous voulez plus d'informations, vous pouvez utiliser une ReflectionClass :

http://www.phpro.org/manual/language.oop5.reflection.html

6voto

GlupiJas Points 196

Pour obtenir plus d'informations, utilisez cette fonction TO($someObject) personnalisée :

J'ai écrit cette fonction simple qui non seulement affiche les méthodes d'un objet donné, mais aussi ses propriétés, son encapsulation et d'autres informations utiles comme les notes de version si elles sont données.

function TO($object){ //Test Object
                if(!is_object($object)){
                    throw new Exception("This is not a Object"); 
                    return;
                }
                if(class_exists(get_class($object), true)) echo "<pre>CLASS NAME = ".get_class($object);
                $reflection = new ReflectionClass(get_class($object));
                echo "<br />";
                echo $reflection->getDocComment();

                echo "<br />";

                $metody = $reflection->getMethods();
                foreach($metody as $key => $value){
                    echo "<br />". $value;
                }

                echo "<br />";

                $vars = $reflection->getProperties();
                foreach($vars as $key => $value){
                    echo "<br />". $value;
                }
                echo "</pre>";
            }

Pour vous montrer comment cela fonctionne, je vais maintenant créer une classe d'exemple au hasard. Créons une classe appelée Person et plaçons quelques notes de version juste au-dessus de la déclaration de la classe :

        /**
         * DocNotes -  This is description of this class if given else it will display false
         */
        class Person{
            private $name;
            private $dob;
            private $height;
            private $weight;
            private static $num;

            function __construct($dbo, $height, $weight, $name) {
                $this->dob = $dbo;
                $this->height = (integer)$height;
                $this->weight = (integer)$weight;
                $this->name = $name;
                self::$num++;

            }
            public function eat($var="", $sar=""){
                echo $var;
            }
            public function potrzeba($var =""){
                return $var;
            }
        }

Maintenant, nous allons créer une instance de Person et l'intégrer à notre fonction.

    $Wictor = new Person("27.04.1987", 170, 70, "Wictor");
    TO($Wictor);

Cela donnera des informations sur le nom de la classe, les paramètres et les méthodes, y compris les informations sur l'encapsulation et le nombre de paramètres, les noms des paramètres pour chaque méthode, l'emplacement de la méthode et les lignes de code où elle existe. Voir le résultat ci-dessous :

CLASS NAME = Person
/**
             * DocNotes -  This is description of this class if given else it will display false
             */

Method [  public method __construct ] {
  @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 75 - 82

  - Parameters [4] {
    Parameter #0 [  $dbo ]
    Parameter #1 [  $height ]
    Parameter #2 [  $weight ]
    Parameter #3 [  $name ]
  }
}

Method [  public method eat ] {
  @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 83 - 85

  - Parameters [2] {
    Parameter #0 [  $var = '' ]
    Parameter #1 [  $sar = '' ]
  }
}

Method [  public method potrzeba ] {
  @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 86 - 88

  - Parameters [1] {
    Parameter #0 [  $var = '' ]
  }
}

Property [  private $name ]

Property [  private $dob ]

Property [  private $height ]

Property [  private $weight ]

Property [ private static $num ]

4voto

Chrys Ugwu Points 912

Essayez d'utiliser Pretty Dump il fonctionne très bien pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X