我正在编写一个用于探索 XML 文档的函数,并且需要使用递归。这不是我想要的,所以开始运行一些测试。
<?php
$i=0;
function recursion(){
    $i++;
    if($i < 10){recursion();}
    echo $i;
    }
recursion();
?> 
这会生成 500 内部服务器错误。好像我处理不当 - 有人可以帮助我吗?
$i函数内部不引用全局变量$i,所以它总是1,脚本溢出堆栈。
您可以$i将其设为全局,但最好将其作为参数传递:
function recursion($i){
    $i++;
    if($i < 10){recursion($i);}
    echo $i;
}
recursion(0);
    <?php
 function recursion($i = 0){
   $i++;
   if($i < 10){recursion($i);}
   echo $i;
  }
recursion();
?>
你错过了论点
$i=0;
function recursion($i){
    $i++;
    if($i < 10){recursion($i);}
    echo $i;
    }
recursion($i);
    尝试i递增后作为参数传递给函数,否则无法识别
您在函数内部将 $i 引用为局部变量。如果要引用全局变量,请使用保留字 global:
<?php
    $i=0;
    function recursion(){
        global $i;
        $i++;
        if($i < 10){recursion();}
        echo $i;
    }
recursion();
?> 
    其他答案可以正常工作,但没有人提到这个选项,所以我就把它扔在那里。
您还可以使用static关键字:
function recursion(){
    static $i = 0;
    $i++;
    if($i < 10){recursion();}
    echo $i;
}
recursion();
    $i 的范围在您的示例中是本地的, $i 在每次调用时都会被初始化并成为无限循环。PHP 通过在达到 200 调用后产生致命错误来中止脚本
致命错误:达到“200”的最大函数嵌套级别,正在中止!
请试试,
$i = 0;
function recursion() {
    global $i;
    $i++;
    echo $i;
    if ($i < 10) {
        recursion();
    }
}
recursion();