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);
6
demandé sur ogc-nick 2013-06-19 05:03:51

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 :)

3
répondu BIOS 2013-06-19 15:30:32

est-ce que ça ferait l'affaire?

function isRecursive($array) {
    foreach($array as $v) {
        if($v === $array) {
            return true;
        }
    }
    return false;
}
0
répondu ogc-nick 2013-06-19 01:24:57