Une question hypothétique pour vous à mâcher...
J'ai récemment répondu à une autre question ALORS, où un script PHP a été segfaulting, et ça m'a rappelé quelque chose que j'ai toujours demandé, nous allons donc voir si quelqu'un peut jeter de la lumière sur elle.
Considérez les points suivants:
<?php
function segfault ($i = 1) {
echo "$i\n";
segfault($i + 1);
}
segfault();
?>
Évidemment, c' (inutile) de la fonction de boucle à l'infini. Et finalement, sera à court de mémoire, parce que chaque appel à la fonction s'exécute avant que le précédent est terminé. Comme une sorte de fourche à la bombe sans la fourche.
Mais... finalement, sur les plate-formes POSIX, le script va mourir avec SIGSEGV (il meurt aussi sur Windows, mais avec plus de grâce - si loin que ma extrêmement limitée à faible niveau de compétences de débogage peut dire). Le nombre de boucles varie selon la configuration du système (mémoire allouée à PHP, 32bit/64bit, etc etc) et de l'OS mais ma vraie question est pourquoi a-t-il arriver avec une erreur de segmentation?
- Est-ce simplement la façon dont PHP poignées "de mémoire" erreurs? Il doit sûrement y être de manière plus élégante de ce traitement?
- Est-ce un bug dans le moteur Zend?
- Est-il de toute façon cela peut être contrôlée ou gérée avec plus de grâce dans un script PHP?
- Est-il un paramètre que, généralement, les contrôles que le nombre maximum d'appels récursifs qui peut être fait dans une fonction?