0

我在 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

它在 javascript 中是这样工作的,但是 PHP 有很多我不明白的地方,所以也许这根本不是问题;

4

3 回答 3

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";
}
于 2013-03-19T18:52:15.810 回答
2

嵌套函数直到调用函数 prepare(...) 后才出现format1()。然而,在当前序列中,这些函数的声明发生在. 因此他们没有准时到场。format2()declaredswitch-statement

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

于 2013-03-19T19:02:25.950 回答
1

您的代码的问题是函数(在函数内时)需要在使用声明:

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

但是,如果您在函数之外声明函数,它们可以在函数之前或之后。

function format1(){..}
function prepare($id){..}
function format2(){..}
于 2013-03-19T18:59:21.987 回答