我在PHP中有一个看起来基本上就像这个
的函数$to_echo = prepare(2);
echo $to_echo;
function prepare($id){
switch($id){
case 1:
$res = format1();
break;
case 2:
$res = format2();
break;
}
function format1(){
return "asdf";
}
function format2(){
return "1234";
}
return $res;
}
但我收到错误Fatal error: Call to undefined function format2() in line...
可以以某种方式在switch语句中$res
看不到函数format1
和format2
吗?我怎样才能让它访问该功能?
It works like this in javascript,但PHP有很多东西我不明白,所以也许这根本不是问题;
答案 0 :(得分:6)
你可以尝试这样:
$to_echo = prepare(2);
echo $to_echo;
function prepare($id){
switch($id){
case 1:
$res = format1();
return $res;
break;
case 2:
$res = format2();
return $res;
break;
}
}
function format1(){
return "asdf";
}
function format2(){
return "1234";
}
答案 1 :(得分:1)
你的代码就是在使用之前需要声明函数(在函数内):
function prepare($id){
function format1(){..}
function format2(){..}
//do prepare here
switch($id){..}
}
但是,如果在函数之外声明函数,它们可以在函数之前或之后出现。
function format1(){..}
function prepare($id){..}
function format2(){..}
答案 2 :(得分:1)
在调用函数prepare(...)之前,嵌套函数format1()
和format2()
不是declared
。但是在当前序列中,这些函数的声明发生在switch-statement
之后。因此他们没有按时出现。
您应该尝试将这些函数声明放在prepare(...)函数的顶部,或者根本不使用嵌套。我会推荐后者。