IRC Php Bot — ошибка вложенности

Я использую SimplePhp IRC BOT, вы можете увидеть весь код прямо на странице.

Проблема, с которой я сталкиваюсь, заключается в том, что основная функция вызывает ее рекурсивно, поэтому после 100 вызовов она просто выдает ошибку, и я получаю эту ошибку:

Неустранимая ошибка: достигнут максимальный уровень вложенности функций "100", прерывание! в C:\xampp\xampp\htdocs\league\bot.php в строке 106

Я вставлю некоторые из основных функций ниже:

 function main($config)
    {             
            $data = fgets($this->socket, 256);

            echo nl2br($data);

            flush();

            $this->ex = explode(' ', $data);


            if($this->ex[0] == 'PING')
            {
                    $this->send_data('PONG', $this->ex[1]); //Plays ping-pong with the server to stay connected.
            }

            $this->main($config);
     }

Есть ли способ добиться той же функциональности без рекурсивного вызова функции? Можно ли иметь этот уровень вложенности, и должен ли я просто увеличить предел вложенности xdebug?


person mike    schedule 05.05.2011    source источник


Ответы (1)


Да — петля while().

Неограниченная рекурсия такого рода не будет эффективно работать в PHP, так как не устраняет хвостовые вызовы. Хотя вы можете увеличить лимит вложенности, вы просто в конечном итоге будете сжигать все больше и больше памяти, прежде чем в конечном итоге произойдет сбой.

person Community    schedule 05.05.2011