php,而循环不起作用,奇怪的错误


Php while loop not working, Strange error

这是我的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是一个

全局变量,在函数外部声明。 另一个$i是局部变量,它有一个存储位置但没有初始值。 如果要从函数中引用全局变量,请添加全局关键字...

i 是一个全局变量,对吧?我认为你应该让函数 f() 知道它。
喜欢这个

global $i;

为什么不只是:

$i = 0;
while($i<3){
    $i++;
    f($i);
}
function f($i){
    echo $i;
}