PHPでは無名関数がPHP5.3以上で対応しています。
つまりWordPressもPHP5.3以上の環境なら無名関数が使用できることになります。
無名関数のメリットは関数名が必要ない事と、クロージャーとして使用できることです。
PHPの無名関数
無名関数の例
$y = function ( ) { echo 'Hello'; }; $y(); //Hello
関数名の無い無名関数を作成して、変数に代入します。
その変数を$y(); のように実行すると無名関数が実行される仕組みです。
通常はコールバック関数のように、そこでしか使用されないような処理を行いたいときに便利な関数です。
もう少し具体的な例でフィルターフックで利用した例です。
functions.phpのコード
add_filter( 'the_title', function ( $title ) { return '★' . $title . '★'; } );
値渡しと参照渡し
通常は関数に、ある値を外から渡したい場合は引数を使用します。
これは無名関数も同様です。
$y = function ($greeting ) { echo $greeting; }; $y('Hello'); //Hello
useを使用すると外の変数を使用することができます。
$greeting='Hello'; $y = function( ) use ($greeting ) { echo $greeting; }; $y( ); //Hello
この場合、変数は値渡しになります。
関数の中で変数を変更しても、もともとの変数$greetingに変わりはありません。
$greeting='Hello'; $y = function() use($greeting ) { $greeting = $greeting.'!<br>'; echo $greeting; }; $y( ); //Hello! echo $greeting; //Hello
けれどもこれを参照渡しにすると結果が変わってきます。
参照渡しの方法は次のように
use (&$greeting )
とするだけです。
$greeting='Hello'; $y = function() use(&$greeting ) { $greeting = $greeting.'!<br>'; echo $greeting; }; $y( ); echo $greeting;
クロージャー
クロージャーは状態を保存できる関数といわれています。
関数の中で無名関数を定義し、その戻り値をローカル変数に保存して活用します。
function hello(){ $greeting='Hello'; return function() use(&$greeting ) { return $greeting = $greeting.'!'; }; } $a=hello(); echo $a().'<br>'; echo $a().'<br>'; echo $a().'<br>'; echo $a().'<br>';