解决方案 »

  1.   


    function a(){
            echo 'a';
            function b(){
                echo 'b';
                function c(){
                    echo 'c';
                }
                c();
            }
            //c();
            b();
        }
        a();
     
        class Demo{
     
            public function a(){
                echo 'demo_a';
                function bb(){
                    echo "demo_b";
                    function cc(){
                        echo "demo_c";
                    }
                    cc();
                }
                bb();
            }
        }
        $demo = new Demo();
        $demo->a();
    abcdemo_ademo_bdemo_c 
      

  2.   

    形如 function b(){} 的是定义函数
    形如 function(){} 的才是闭包你的代码是在函数里定义函数,虽然符合语法规则,但后患无穷这才是闭包
    $c = function() {
        echo 'c';
    }
    $c();
      

  3.   

    闭包是自己调用自己,是匿名函数。
    你这个只是在函数内定义了函数。函数必须先定义才可以使用。因此把
    10,11行交换一下顺序就可以了。function a(){
        echo 'a';
        function b(){
            echo 'b';
            function c(){
                echo 'c';
            }
            c();
        }
        b();
        c();
    }
    a();class Demo{    public function a(){
            echo 'demo_a';
            function bb(){
                echo "demo_b";
                function cc(){
                    echo "demo_c";
                }
                cc();
            }
            bb();
        }
    }
    $demo = new Demo();
    $demo->a();
    abccdemo_ademo_bdemo_c