Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Récursion infinie

<?php

$a = [1,2,3];
$a[] = &$a;

print_r($a);

function foo($a) {
    foreach($a as $b) {
        if (is_array($b)) {
            foo($b);
        } else {
            print $b.PHP_EOL;
        }
    }
}

// Infinite call
//foo($a);

Les fonctions récursives doivent être protégées contre la récursion infinie : le genre de boucle qui ne s’arrête jamais.

Dans ce cas particulier, injecter une référence vers le tableau lui-même est une syntaxe PHP valide. Une fois dans la boucle, elle est détectée comme un tableau, et l’appel recommence. Cela ne s’arrête jamais.

La fonction récursive doit être protégée par un niveau d’imbrication, pour éviter ce genre de cas.

Les fonctions natives, comme print_r() et var_dump(), sont protégées depuis PHP 7 au moins.

Le même problème peut survenir avec un objet et un lien vers lui-même, bien qu’ils soient moins susceptibles d’être utilisés dans une boucle récursive, contrairement aux tableaux.

See Also

PHP Features

Last updated: 22 October 2026