Проблема заключается в том, что $herpNum
является redefinded в качестве локального вар в рамках herp()
каждый раз, когда вызывается herp()
. Это приведет к циклу рекурсии до тех пор, пока не будет достигнут «максимальный уровень вложенности функции« 100 »...». (Вы можете увидеть ошибки, когда вы установите значение INI PHP «display_errors» на «On»)
Изменить код выше:
$herpNum = 0;
function herp() {
global $herpNum;
if ($herpNum == 22) {
echo "done";
} else {
$herpNum = $herpNum+1;
echo $herpNum."<br/>";
herp();
}
}
herp();
Обратите внимание, что если $herpNum
используется только herp()
это может быть лучше объявить его как статическую переменную внутри herp()
.
function herp() {
static $herpNum = 0;
// ...
Статическое ключевое слово сообщает интерпретатору PHP, что оно должно инициализировать переменную только один раз, когда функция вызывается в первый раз. Это должно идеально соответствовать вашим потребностям проектирования;)
PHP не имеет области видимости цепей, которые работают как JavaScript. – alex
http://php.net/functions.user-defined - на этой странице см. [* Пример # 4 Рекурсивные функции *] (http://php.net/functions.user-defined#example-150) для аналогичного но рабочий вариант. – hakre
Также, пожалуйста, используйте поиск, прежде чем задавать вопрос. Я уверен, что QA-материал о том, как написать рекурсивную функцию в PHP, существует уже на сайте (рядом с самим руководством PHP). – hakre