closure(無名関数)はPHP5.3から導入されました
参考 http://php.net/manual/ja/functions.anonymous.php
今回はその使いかたを簡単に書いときます
そもそも必要性として「一回しか使わない関数を定義しなくていい」「関数名を考える必要がない」だと自分は思っています。
まずはhello_world
<?php $print = function($str){ echo $str."\n"; }; $print("hello world"); ?>
見ての通り変数に関数を入れてる感じですね
再帰処理にも使えます。
そのときに使いのがuseです。
useは親のスコープから変数を引継ぎをする時に使います。
階乗
<?php $factorial = function($n)use( &$factorial){ if($n == 1) return 1; else return $n * $factorial($n - 1); }; echo $factorial(5)."\n"; ?>
Fibonacci
<?php $fib = function($n)use( &$fib){ if($n <= 1) return $n; else return $fib($n - 1) + $fib($n - 2); }; echo $fib(5)."\n"; ?>
__invokeメゾット
newやメゾットが実行されても動かずにインスタンスから直接引数が与えられた時に実行するメゾット
<?php class A{ public function __invoke($str){ echo $str."\n"; } }; $c = new A; $c("hello"); ?>
以上です