解 説

PHPでは無名関数がPHP5.3以上で対応しています。
つまりWordPressもPHP5.3以上の環境なら無名関数が使用できることになります。

無名関数のメリットは関数名が必要ない事と、クロージャーとして使用できることです。

PHPの無名関数

無名関数の例

サンプル1

$y = function ( ) {
  echo 'Hello';
};
$y();  //Hello

関数名の無い無名関数を作成して、変数に代入します。
その変数を$y(); のように実行すると無名関数が実行される仕組みです。

通常はコールバック関数のように、そこでしか使用されないような処理を行いたいときに便利な関数です。

もう少し具体的な例でフィルターフックで利用した例です。
functions.phpのコード

add_filter( 'the_title', function ( $title ) {
return '★' . $title . '★';
} );

値渡しと参照渡し

通常は関数に、ある値を外から渡したい場合は引数を使用します。
これは無名関数も同様です。

サンプル2

$y = function ($greeting ) {
  echo $greeting;
};
$y('Hello');  //Hello

useを使用すると外の変数を使用することができます。

サンプル3

$greeting='Hello';
$y = function( ) use ($greeting ) {
  echo $greeting;
};
$y( );  //Hello

この場合、変数は値渡しになります。
関数の中で変数を変更しても、もともとの変数$greetingに変わりはありません。

サンプル4

$greeting='Hello';
$y = function() use($greeting ) {
	$greeting = $greeting.'!<br>';
  echo $greeting;
};
$y( );  //Hello!
echo $greeting;  //Hello

けれどもこれを参照渡しにすると結果が変わってきます。

参照渡しの方法は次のように
use (&$greeting )
とするだけです。

サンプル5

 $greeting='Hello';
$y = function() use(&$greeting ) {
	$greeting = $greeting.'!<br>';
  echo $greeting;
};
$y( );
echo $greeting; 
 

クロージャー

クロージャーは状態を保存できる関数といわれています。

関数の中で無名関数を定義し、その戻り値をローカル変数に保存して活用します。

サンプル6

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>';