1 function foo($i){
2 return bar($i)*4;
3 function bar($i){
4 return $i*4;
5 }
6 }
7 echo foo(4);
返回
Fatal error: Call to undefined function bar() in /var/www/index.php on line 2
为什么不起作用?它在javascript中运行良好,而当我这样做时它可以工作:
function foo($i){
return bar($i)*4;
}
function bar($i){
return $i*4;
}
答案 0 :(得分:18)
将函数定义在返回值之上,否则永远不会执行。
<?php
function foo($i){
function bar($i){
return $i*4;
}
return bar($i)*4;
}
echo foo(4);
?>
答案 1 :(得分:3)
它不起作用,因为您在创建之前调用bar()。 请参阅此处的示例2: - http://www.php.net/manual/en/functions.user-defined.php
答案 2 :(得分:1)
您的代码永远不会到达function bar(...)
,因此它永远不会被定义。
您需要将bar()
功能放在foo()
之前或return bar
之前。 (根据你的第一个例子回答)。
使用您的第二个示例,您可能在使用bar()
之前定义foo()
,因此bar()
已定义,并且工作正常。
因此,只要你在代码中的某个位置定义了函数,它就可以正常工作,无论是否在另一个函数中调用它。
答案 3 :(得分:1)
如果在另一个函数中定义函数,则可以直接访问它,但在调用父函数之后。 例如:
function a () {
function b() {
echo "I am b.";
}
echo "I am a.<br/>";
}
//b(); Fatal error: Call to undefined function b() in E:\..\func.php on line 8
a(); // Print I am a.
b(); // Print I am b.
答案 4 :(得分:0)
执行不在return语句后执行
像这样更改您的代码
function foo($i){
function bar($i){
return $i*4;
}
return bar($i)*4;
}
echo foo(4);