2013-03-19 47 views
0

我有一个PHP函数,基本上是这样的化妆功能可见switch语句

$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; 

} 

但我发现了switch语句中的错误Fatal error: Call to undefined function format2() in line...

能以某种方式在$res看不到功能format1format2?我怎样才能让它访问该功能?

It works like this in javascript,但PHP有很多我不明白,所以也许这不是问题;

+0

@Jocelyn Line 19 – 1252748 2013-03-19 18:57:07

+0

相关问题:[在函数定义之前调用函数](http://stackoverflow.com/q/3559875/1409082) – Jocelyn 2013-03-19 18:59:11

回答

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"; 
} 
+0

这可行。但是,switch语句的内部如何访问父级外部的函数,甚至不能访问其父级的子级? ^^谢谢! – 1252748 2013-03-19 18:56:22

+1

您可以访问在页面上编写的所有功能,或者如果您包含任何文件,并且您有任何功能,那么您也可以在开关盒内访问该功能。 – 2013-03-19 18:57:44

1

与您的代码的事情是,需要声明之前使用的功能(在函数中时):

function prepare($id){ 
    function format1(){..} 
    function format2(){..} 
    //do prepare here 
    switch($id){..} 
} 

然而,如果你在函数之外声明函数,它们可以在函数之前或之后出现。

function format1(){..} 
function prepare($id){..} 
function format2(){..} 
+0

是的,如果你移动开关上方的两个内部函数,它将起作用 – 2013-03-19 19:02:23

1

嵌套函数format1()format2()declared直到函数的调用准备(...)已经取得进展。但是在目前的顺序中,这些功能的声明发生在switch-statement之后。因此他们没有按时出席。

您应该尝试将这些函数声明放在prepare(...)函数的顶部,或根本不使用嵌套。我会推荐后者。

+0

有意义。谢谢! – 1252748 2013-03-19 19:22:46