0

これが私の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  
4

5 に答える 5

4

$i は関数のスコープで定義されていません。毎回ゼロにリセットされます。

$i = 0;

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

while (f());
于 2013-09-15T22:34:26.660 に答える
1

関数内の$i変数は、(その関数の) ローカル変数です。関数外の変数にアクセスする場合は、 を使用しますglobal。これは、変数のスコープに関係しています。

<?php
$i = 0;

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

while(f());

また、すべてのコード パスで必ず値を返すようにすることもお勧めします (既定値に依存しないでください)。

于 2013-09-15T22:34:49.380 に答える
0

i はグローバル変数ですよね?関数 f() に知らせるべきだと思います。
このような

global $i;
于 2013-09-15T22:37:39.440 に答える
0

$i は、関数の外で宣言されたグローバル変数です。もう 1 つの $i はローカル変数で、格納場所はありますが初期値はありません。関数内からグローバル変数を参照したい場合は、global キーワードを追加してください...

于 2013-09-15T22:34:02.253 に答える
-1

それだけではない理由:

$i = 0;

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

function f($i){
    echo $i;
}
于 2013-09-15T22:40:10.637 に答える