2016-06-18 12 views
1

Python、Js、PHPの関数では、すべてファーストクラスのオブジェクトと言います。 PHPの例が正しいことを確認したいと思います。このコードをPHPに移植する他の方法はありますか?入れ子関数、PHPのファーストクラス関数

パイソン3

def a(): 
    print("init") 
    def b(): 
     print("inside") 
     def c(): 
      print("inception") 
    return c 
return b 


a()()() 

結果

init 
inside 
inception 
[Finished in 0.1s] 

のJavascript(ノード)

function a() { 
    console.log("init") 
    function b() 
    { 
     console.log("inside") 
     function c() 
     { 
      console.log("inception") 
     } 
     return c 
    } 
    return b 
} 

s = a()()() 

結果

init 
inside 
inception 
[Finished in 0.2s] 

PHP 5.5

Parse error: syntax error, unexpected '(' 

0 PHPに再度お試しすることができます

function a() 
{ 
    echo "init".PHP_EOL; 
    $x = function() 
    { 
     echo "inside".PHP_EOL; 
     $y = function() 
     { 
      echo "inception".PHP_EOL; 
     }; 
     echo "b".PHP_EOL; 
     return $y; 
    }; 
    return $x; 
} 

a()()(); 

結果

結果

init 
inside 
inception 
[Finished in 0.1s] 

ことは、PHPで、ネストされた関数を呼び出すための唯一の方法ですか?

UPDATE PHPでは、PythonやJSと同じように関数を返すことができますか?最初にクロージャーとして変数に代入する必要があります。

答えて

2

あなたの例はPHP 7以降で動作します。その前に、一時変数またはcall_user_func()を使用する必要があります(しかし、それはかなり醜いでしょう)。

https://wiki.php.net/rfc/uniform_variable_syntax

+0

PHP 7 +の互換性に関するドキュメントリンクを共有できますか? – c3cris

+1

https://wiki.php.net/rfc/uniform_variable_syntax – ShiraNai7

+0

私はこれをドキュメントで見つけることができなかった理由はありますか? – c3cris

関連する問題