Lorsque vous traitez avec certains objets PHP, il est possible de faire un Ma question est la suivante: Comment pouvez-vous éviter cela et garder PHP de dumping déchaîner de manière récursive les mêmes choses encore et encore? Utilisation de l'exemple simple HTML DOM Parser, si j'ai un objet DOM qui n'a pas d'enfant et i var_dump () code> et PHP imprime les valeurs à l'écran allant sur et allumé jusqu'à ce que la limite de mémoire PHP soit atteinte, je suppose. Un exemple de ceci est dumping un simple objet HTML DOM. Je suppose que parce que vous êtes capable de traverser les enfants et les parents d'objets, que faire
var_dump () code> donne des résultats infinis car il trouve le parent d'un objet, puis trouve ensuite recroversité ses enfants et trouve ensuite tous ces enfants Parents et trouve ces enfants, etc., etc, etc. Il va simplement continuer. P>
var_dump () code> it, j'aimerais simplement jeter l'objet et ne commence pas à parcourir l'arbre DOM et des parents dumping, grands-parents, autres enfants, etc. p>
3 Réponses :
Pourquoi n'exécutez-vous pas simplement un du Documents PHP : P>
La construction de Foreach donne simplement un moyen facile de parcourir des tableaux.
foreach em> ne fonctionne que sur les tableaux ( et objets forts>), et émettra une erreur
Lorsque vous essayez de l'utiliser sur une variable avec un type de données différent ou un
variable non initialisée. p>
blockQuote> foreach code> en boucle sur votre objet? p>
Vraiment? PHP me donne toujours un avis lorsque j'essaie d'envoyer une STDCLASS à foreach. Y a-t-il une limite à quels objets vous pouvez utiliser avec cela?
si-not-true-then-false.com/2009/...
@animuson pouvez-vous coller un exemple de cela? Je n'ai jamais eu un tel problème.
@YODA: Ce n'est que la norme «ARLACH ARLARH TOST ARGUMENT 1 pour être un tableau» ou quoi que ce soit. J'ai toujours dû taper le style STDCLASS à un tableau d'abord, puis envoyez-le à destination de vous débarrasser de l'avis.
Eh bien maintenant que je sais, je vais essayer de trouver où j'avais ce problème dans mon code et postera une question pourquoi cela fait ça ...
foreach "techniquement" veut un tableau. Si vous voulez perdre beaucoup de temps et écrire un mauvais code, allumez les avis.
Installez l'extension Xdebug dans votre environnement de développement. Il remplace Var_Dummp avec son propre qui ne va que 3 membres profondément par défaut.
https://xdebug.org/ DOCS / Affichage P>
Il affichera les éléments 4 niveaux profond comme une ellipsie. Vous pouvez modifier la profondeur avec un réglage INI. P>
toutes les fonctions PHP: var_dump, var_export et print_r ne suivent pas les références de récursives / circulaires. P>
EDIT: P>
Si vous voulez le faire de manière difficile, vous pouvez écrire votre propre fonction P>
print_rr($thing, $level=0) { if ($level == 4) { return; } if (is_object($thing)) { $vars = get_object_vars($thing); } if (is_array($thing)) { $vars = $thing; } if (!$vars) { print " $thing \n"; return; } foreach ($vars as $k=>$v) { if (is_object($v)) return print_rr($v, $level++); if (is_array($v)) return print_rr($v, $level++); print "something like var_dump, var_export output\n"; } }
Existe-t-il une méthode qui n'implique pas xdebug?
@Nicholasshanks Non non à moins d'écrire votre propre et une profondeur de piste.
J'ai eu ce problème et n'avais pas besoin de voir à l'intérieur des objets, juste des noms de classe d'objet, alors j'ai écrit une fonction simple pour remplacer les objets avec leurs noms de classe avant de jeter les données:
var_dump(sanitizeDumpContent($recursive_content))
php.net/manual/fr/funcund.var-dump. PHP # 99765