2015-11-10 3 views
1

Просто спросите название спрашивает, вот код:Почему эта бесконечная рекурсия?

<?php 

$foo = 0; 

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

function changeFoo() { 
    extract($GLOBALS); 

    $foo = -1; 
} 

letsLoop(); 
+2

Потому что объем переменной. –

+0

экстракт опасен, используйте с особой осторожностью –

ответ

5

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

function changeFoo() { 
    global $foo; 

    $foo = -1; 
} 
+0

А я вижу, глобальный НЕ равен extract(), это извлеченный урок. Будет отмечен как правильный ответ, когда произойдет тайм-аут. – randombits

+0

Также попробуйте '$ GLOBALS ['foo']' – AbraCadaver

Смежные вопросы