Исправляем Fatal error: Maximum function nesting level of 100 reached, aborting!

Fatal error: Maximum function nesting level of 100 reached, aborting!
Буквально недавно во время одного из этапов тестирования выловили ошибку Fatal error: Maximum function nesting level of ‘100’ reached, aborting! Погуглив, понял что дело в конфигурации xdebug’a.

И все было бы прекрасно, ведь описанное решение было очень простым. Нужно было лишь в php.ini задать значение параметра побольше, например 200.

[php] xdebug.max_nesting_level = 200
[/php]

Но вот незадача: на сервере, на котором проводились тесты, xdebug не стоял. Поэтому нужно было решать проблему по-другому. Взглянув на строку, которая провоцировала проблему, я нашел решение.

Все дело было в модели, точнее в методе. Модели в данном приложении реализованы с применением паттерна «Active Record», и наследуются от Zend_Db_Table_Abstract. Так вот, так вышло, что в модели уже был описан метод insert (точнее переопределен) — это и вызвало ошибку.

[php] class Default_Model_AccountRequest extends Zend_Db_Table_Abstract {

protected $_name = ‘account_requests’;

public function insert(array $_data){
return $this->insert($_data);
}

[/php]

Метод можно было смело удалять. Вот так.

Stas Kuryan

Web developer. Перфекционист в написании кода.

4 комментария

  1. Виктор     

    Спасибо, точно это я и искал. А то пишу движок для своего сайта и такаяя фигня выползла =)

  2. Юлий     

    Можете более точно написать как провели устранение ошибки:?
    xdebug.max_nesting_level = 200 не помогло

    «Все дело было в модели, точнее в методе. Модели в данном приложении реализованы с применением паттерна «Active Record», и наследуются от Zend_Db_Table_Abstract. Так вот, так вышло, что в модели уже был описан метод insert (точнее переопределен) — это и вызвало ошибку.» — не нашёл у себя такого.

    • Stafox        Автор

      Посмотрите нет ли у Вас непрерывной рекурсии.

  3. it-swarm.net     

    Очень неприятная ошибка. Сталкивался с подобным при работе с файлами на не самом быстром железе. Функция в рекурсии обращалась к файлу раньше, чем тот освобождался предыдущим вызовом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *