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
- Involuntary infinite loop [Try me]
PHP Features
Last updated: 22 October 2026