これが私の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
これが私の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
$i は関数のスコープで定義されていません。毎回ゼロにリセットされます。
$i = 0;
function f() {
global $i;
$i++;
echo $i;
return $i<3; //thanks @styxxy
}
while (f());
関数内の$i
変数は、(その関数の) ローカル変数です。関数外の変数にアクセスする場合は、 を使用しますglobal
。これは、変数のスコープに関係しています。
<?php
$i = 0;
function f() {
global $i;
$i++;
echo $i;
if ($i < 3) return true;
return false;
}
while(f());
また、すべてのコード パスで必ず値を返すようにすることもお勧めします (既定値に依存しないでください)。
i はグローバル変数ですよね?関数 f() に知らせるべきだと思います。
このような
global $i;
$i は、関数の外で宣言されたグローバル変数です。もう 1 つの $i はローカル変数で、格納場所はありますが初期値はありません。関数内からグローバル変数を参照したい場合は、global キーワードを追加してください...
それだけではない理由:
$i = 0;
while($i<3){
$i++;
f($i);
}
function f($i){
echo $i;
}