Почему эта бесконечная рекурсия?

1

Просто спросите название спрашивает, вот код:

<?php

$foo = 0;

function letsLoop() {
    while ($foo != -1) {
        changeFoo();
        echo "Hello, world!\n";
    }
}

function changeFoo() {
    extract($GLOBALS);

    $foo = -1;
}

letsLoop();
  • 2
    Потому что область видимости переменной.
  • 0
    экстракт опасен, используйте с особой осторожностью
Теги:

1 ответ

5
Лучший ответ

Просто потому, что вы извлекаете глобальное значение в локальную область, это не означает, что вы будете изменять глобальную переменную $foo. Чтобы ссылаться на глобальную переменную внутри функции, вы должны использовать global ключевое слово:

function changeFoo() {
    global $foo;

    $foo = -1;
}
  • 0
    Ах, я вижу, глобальный НЕ равен извлечению (), это урок. Будет отмечен как правильный ответ, когда истечет время ожидания.
  • 0
    Также попробуйте $GLOBALS['foo']

Ещё вопросы

Сообщество Overcoder
Наверх
Меню