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 是一个全局变量,在函数外部声明。另一个 $i 是一个局部变量,它有一个存储位置但没有初始值。如果要在函数内引用全局变量,请添加 global 关键字...

于 2013-09-15T22:34:02.253 回答
0

我是一个全局变量对吗?我认为你应该让函数 f() 知道它。
像这样

global $i;
于 2013-09-15T22:37:39.440 回答
-1

为什么不只是:

$i = 0;

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

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