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