【发布时间】:2014-05-20 21:01:59
【问题描述】:
我尝试获取值10,但它来自NULL。这里出了什么问题?在 PHP 5.3 上测试
<?php
function foo($i=0){
if($i<10) foo($i+1);
else return $i;
}
$value = foo();
var_dump($value);
?>
【问题讨论】:
我尝试获取值10,但它来自NULL。这里出了什么问题?在 PHP 5.3 上测试
<?php
function foo($i=0){
if($i<10) foo($i+1);
else return $i;
}
$value = foo();
var_dump($value);
?>
【问题讨论】:
如果foo 中的i 为10,则将值10 返回给foo 的调用实例(其中i 为9),然后函数在没有返回语句的情况下结束。
你可能想要
function foo($i=0) {
if($i<10)
return foo($i+1);
return $i;
}
【讨论】:
你的代码是这样工作的:
function foo($i=0){
if($i<10)
foo($i+1);
else
return $i;
return; // implicit return
}
因为$i if 之外有一个不返回值的隐式返回。
为了从递归中返回值,您需要一个 return 语句:
function foo($i=0){
if($i<10)
return foo($i+1);
else
return $i;
}
【讨论】:
试试
if($i<10)
return foo($i+1);
else
return $i;
因为否则它永远不会返回。
【讨论】:
你应该返回值:
function foo($i=0){
if($i<10) {
return foo($i+1);
} else {
return $i;
}
}
【讨论】:
尝试:
函数 foo($i) {
if ($i < 10) {
echo "a",$i;
$i=foo(($i + 1));
}
return $i;
}
【讨论】:
为了您的理解,回显$i,然后在最后一个函数进行测试,从不调用else语句尝试不使用else语句。
function foo($i=0){
if($i<10){
foo($i+1);
echo $i;
}
return $i;
}
$value = foo();
var_dump($value);
【讨论】: