Ответ
Да, формально такой код написать можно, но его выполнение почти мгновенно завершится ошибкой переполнения стека вызовов (Stack Overflow).
Пример проблемного кода:
function infiniteRecursion() {
infiniteRecursion(); // Каждый вызов добавляет новый фрейм в стек
}
infiniteRecursion();
Что происходит:
- Каждый вызов функции помещает в стек вызовов информацию о локальных переменных, аргументах и точке возврата.
- При бесконечной рекурсии этот стек исчерпывает выделенную ему память.
- Интерпретатор PHP аварийно завершает скрипт.
Ограничения в PHP:
- При активном расширении Xdebug сработает ограничение
xdebug.max_nesting_level(по умолчанию 256). - Без Xdebug скрипт упадет при достижении лимита стека, установленного самим PHP или операционной системой.
Правильная альтернатива: Для задач, требующих повторения, следует использовать итеративные циклы.
// Вместо рекурсии — цикл
while (true) {
// ... логика ...
if ($exitCondition) {
break; // Контролируемый выход
}
}
Рекурсию стоит применять только для задач, которые по своей природе рекурсивны (обход деревьев, факториал), и всегда предусматривать базовый случай (base case) для остановки.