我正在编写一个用于探索 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();