Я согласен, что, как правило, мне все равно, чтобы исключения такого рода появлялись. Но я также понимаю обстоятельства, которые могут привести к такому выбору - переполнение стека является одной из самых сложных вещей, которые необходимо решить во время выполнения языка.

етический вопрос для всех вас, чтобы пережевать ...

Недавно я ответил на другой вопрос, касающийся SO, где PHP-сценарий работал с ошибками, и он напомнил мне кое-что, о чем я всегда задумывался, поэтому давайте посмотрим, сможет ли кто-нибудь пролить свет на это.

Учтите следующее:

<?php

  function segfault ($i = 1) {
    echo "$i\n";
    segfault($i + 1);
  }

  segfault();

?>

Очевидно, что эта (бесполезная) функция зацикливается бесконечно. И, в конце концов, не хватит памяти, потому что каждый вызов функции выполняется до завершения предыдущего. Вроде как вилочная бомба без разветвления.

Но ... в конце концов, на платформах POSIX, сценарий умрет с SIGSEGV (он также умирает на Windows, но более изящно - насколько могут судить мои крайне ограниченные навыки отладки на низком уровне). Количество циклов варьируется в зависимости от конфигурации системы (память, выделенная для PHP, 32-битная / 64-битная и т. Д.) И ОС, но мой настоящий вопрос - почему это происходит с segfault?

Это просто, как PHP обрабатывает ошибки «нехватки памяти»? Конечно, должен быть более изящный способ справиться с этим?Это ошибка в движке Zend?Есть ли способ, которым это можно контролировать или обрабатывать более изящно из сценария PHP?Есть ли настройка, которая обычно контролирует максимальное количество рекурсивных вызовов, которые можно выполнить в функции?

Ответы на вопрос(3)

Ваш ответ на вопрос