Я согласен, что, как правило, мне все равно, чтобы исключения такого рода появлялись. Но я также понимаю обстоятельства, которые могут привести к такому выбору - переполнение стека является одной из самых сложных вещей, которые необходимо решить во время выполнения языка.
етический вопрос для всех вас, чтобы пережевать ...
Недавно я ответил на другой вопрос, касающийся SO, где PHP-сценарий работал с ошибками, и он напомнил мне кое-что, о чем я всегда задумывался, поэтому давайте посмотрим, сможет ли кто-нибудь пролить свет на это.
Учтите следующее:
<?php
function segfault ($i = 1) {
echo "$i\n";
segfault($i + 1);
}
segfault();
?>
Очевидно, что эта (бесполезная) функция зацикливается бесконечно. И, в конце концов, не хватит памяти, потому что каждый вызов функции выполняется до завершения предыдущего. Вроде как вилочная бомба без разветвления.
Но ... в конце концов, на платформах POSIX, сценарий умрет с SIGSEGV (он также умирает на Windows, но более изящно - насколько могут судить мои крайне ограниченные навыки отладки на низком уровне). Количество циклов варьируется в зависимости от конфигурации системы (память, выделенная для PHP, 32-битная / 64-битная и т. Д.) И ОС, но мой настоящий вопрос - почему это происходит с segfault?
Это просто, как PHP обрабатывает ошибки «нехватки памяти»? Конечно, должен быть более изящный способ справиться с этим?Это ошибка в движке Zend?Есть ли способ, которым это можно контролировать или обрабатывать более изящно из сценария PHP?Есть ли настройка, которая обычно контролирует максимальное количество рекурсивных вызовов, которые можно выполнить в функции?