PHP 即時関数について (function(){})() なんじゃこりゃ

疑問

やりたかったこと

defin()を使って定数LEVEL に1~99までを格納しようと考えた。 1~100まで記入するのは面倒だったので、for文で回そうと考え、以下のように実行できないか考えた。

defin(
  'LEVEL',
  function(){
     $level = [];
     for($i=1;$i<100;$i++){
         $level[] = $i ;
     }
    return $level;
  }
)

しかし、これではLEVELに関数がそのまま格納されてしまう。 私がほしいのは、実行結果を入れたいのである。

調査

  • 「無名関数 実行」でググった。
  • php (無名関数)()」でググった。
  • PHP 即時実行関数」でググった。

「無名関数 実行」でググった際に、 phpの公式ドキュメントの例で(function(){処理})() と書いているのを発見。

「即時実行」というキーワードで検索したら良さそうだと気づき、検索。

わかったこと

  • 無名関数をその場で実行する場合、それは即時実行関数という。
  • (無名関数)()の形で書ける。
  • JavaScriptではよく使う手法とのこと。
  • 即時実行関数は名前空間を汚さずに関数を使いたいとき便利とのこと
  • 以下に訂正したコードを記載
defin(
  'LEVEL',
  (function(){
     $level = [];
     for($i=1;$i<100;$i++){
         $level[] = $i ;
     }
    return $level;
  })()
)

私が期待した処理はこれでできました!

参考