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 ?
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 ?
<?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_class() <-- pour le nom de l'instance
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 !
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 ]
Essayez d'utiliser Pretty Dump il fonctionne très bien pour moi
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.
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()
yvar_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 fonctionprint_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.
0 votes
L'utilisation du deuxième argument facultatif est incroyable ! Pour un objet $product dans une boutique en ligne, je peux maintenant utiliser
print_r($products,True)
au lieu deget_object_vars($product)
dans la journalisation de débogage viaerror_log(...,0)
. Et on obtient en plus les valeurs clés des variables de l'objet, qui sont organisées sous forme de tableau associatif dans mon cas. Je me demandais pourquoi print_r($product) retournait 1 comme résultat. Merci beaucoup à Brad Lowry !0 votes
Une astuce lors de l'utilisation de print_r pour le débogage : Utilisez-le toujours avec le deuxième argument spécifié comme vrai pour éviter les erreurs. Par exemple
error_log("print_r(\$product) = ".print_r($product),0);
a provoqué une erreur dans un connecteur script dans mon cas, alors queerror_log("print_r(\$product,true) = ".print_r($product,true),0);
était bien. (Et a également donné le résultat souhaité :-)