2013-09-15 3 views
0

Вот мой PHP:Php в то время как цикл не работает, Странная ошибка

<? 
    $i = 0; 

    function f() { 
    $i++; 
    echo $i; 
    if ($i < 3) { 
    return true; 
    } 
} 

while(f()) 
?> 

Я ожидал, что выход будет 123

Но я получаю это:

Fatal error: Maximum execution time of 30 seconds exceeded in exp.php on line 5 
+0

вы не возвращает ложь в любом месте. – kennypu

+0

не необходимо. если ничего не возвращается, по умолчанию он имеет значение null, которое равно false. Однако мои глаза ищут что-то, чтобы вернуться для большей удобочитаемости :) – Malkocoglu

+0

Попробуйте использовать $ f = function() ($ i) {...} ', а затем' while ($ f()) ' – elclanrs

ответ

1

$i переменной внутри функции является локальной переменной (этой функции). Если вы хотите получить доступ к переменной (-ами) вне функции, используйте global. Это связано с variable scope.

<?php 
$i = 0; 

function f() { 
    global $i; 
    $i++; 
    echo $i; 
    if ($i < 3) return true; 
    return false; 
} 

while(f()); 

Это также хорошая практика, чтобы убедиться, что вы вернуть значение по всем путям кода (а не полагаться на значения по умолчанию).

+0

Это сработало, я didn «Я понимаю, что локально определенная переменная будет переопределять глобальный var с тем же именем, интересным, спасибо. – andrew

+0

@andrew Также читайте о [variable scope] (http://www.php.net/manual/en/language.variables.scope.php) на php.net ;-). – Styxxy

+0

'if ($ i <3) возвращает true; return false; 'можно сократить до' return ($ i <3); ' –

0

$ я это глобальная переменная, объявленная вне функции. Другой $ i является локальной переменной, он имеет место хранения, но не имеет начального значения. Если вы хотите обратиться к глобальной переменной изнутри функции, добавьте глобальное ключевое слово ...

4

$ i не определен в области действия функции. Каждый раз он сбрасывается до нуля.

$i = 0; 

function f() { 
    global $i; 
    $i++; 
    echo $i; 
    return $i<3; //thanks @styxxy 
} 

while (f()); 
0

i - глобальная переменная справа? Я думаю, вы должны сообщить об этом функции f().
Как это

global $i; 
-1

Почему не просто:

$i = 0; 

while($i<3){ 
    $i++; 
    f($i); 
} 

function f($i){ 
    echo $i; 
} 
Смежные вопросы