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...

どういうわけか$res、switch ステートメント内で関数が表示されない可能性がformat1ありformat2ますか? その機能へのアクセスをどのように許可できますか?

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

ネストされた関数format1()とは、関数 prepare(...) の呼び出しが行われるまで存在しformat2()ません。declaredただし、現在のシーケンスでは、これらの関数の宣言はswitch-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 に答える