Tester si la variable contient des références circulaires
comment testez-vous une variable pour les références circulaires?
j'utilise la fonction var_export()
de PHP avec l'argument de chaîne de retour défini à true
.
j'ai trouvé que Warning: var_export does not handle circular references
et je me demandais si quelqu'un connaissait un moyen de tester si une variable contient une référence circulaire afin que je puisse l'utiliser avant d'essayer d'utiliser var_export
.
je sais que var_export
produit PHP texte eval-able qui peut être utilisé pour recréer le tableau et même si Je ne l'utilise pas pour cela je veux toujours utiliser cette fonction quand il est disponible parce que le format de sortie répond à mes besoins. var_dump
n'est pas une option, car il n'accepte pas un argument pour retourner une chaîne de caractères à la place. Je suis conscient que je pourrais amortir la sortie de var_dump
qui gère les références circulaires avec élégance et sauver le contenu de la mémoire tampon à une variable, mais je veux vraiment juste savoir si quelqu'un connaît un moyen de tester de telles références dans une variable.
si vous voulez créer une référence circulaire rapide faites ceci:
$r = array();
$r[] = &$r;
var_export($r, true);
2 réponses
Hacky mais retourne true basé sur l'exemple circulaire que vous avez donné:
<?php
// create the circular reference
$r = array();
$r[] = &$r;
function isRecursive($array){
$dump = print_r($array, true);
if(strpos($dump, '*RECURSION*') !== false)
return true;
else
return false;
}
echo isRecursive($r); // returns 1
Intéressé de voir ce que les gens viennent avec :)
est-ce que ça ferait l'affaire?
function isRecursive($array) {
foreach($array as $v) {
if($v === $array) {
return true;
}
}
return false;
}