使函数对switch语句可见

时间:2013-03-19 18:49:45

标签: php scope

我在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看不到函数format1format2吗?我怎样才能让它访问该功能?

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

3 个答案:

答案 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(...)函数的顶部,或者根本不使用嵌套。我会推荐后者。