今さらながらPHPでもJavascriptみたいに無名関数が使えることを知った

PHP5.3から実装されていたようですが、まったく目にすることがなかったので今日まで知らずにきてしまいました。

PHPの無名関数は知らなくてもまったく問題ないのですが、特定の使い方において効果を発揮しそうなのでメモしておきます。

WordPressテーマやプラグインをカスタマイズしていると以下のようにフックして指定関数を実行することがよくあると思います。

※例:WordPressのアドミンバーを非表示にする

//アドミンバーの非表示
function hide_admin_bar(){
	return false;
}
add_filter( 'show_admin_bar' , 'hide_admin_bar');

このコードを以下のように無名関数を使って書きなおすことができます。

//アドミンバーの非表示
add_filter( 'show_admin_bar' , function () {
	return false;
} );

どうでしょう?この方法を使えばソースコード全体を更にコンパクトにできますし、当該フックに追加した処理がわかりやすくなるので明示的です。

地味に関数命名というクリエイティブセンスの求められる作業からも逃れられるのもメリットかと(笑)。

PHPの無名関数もJavascriptのように変数に代入して使用することもできます。

//無名関数を変数に代入
$kansu = function ( $str ) {
	echo 'Hello ' . $str ;
};
//変数に引数を渡して代入した関数を実行
$kansu( 'World' );

使い方としては関数内の変数のスコープ管理などがあげられそうですが、そういった問題に対する別の解決策が確立されているのであえて使うことは少ないのかもしれませんね。

ただ、Javascriptのように即時実行関数とすることはできないみたいです。

//動きません!
(function(){
	echo 'Bye World';
})();

これができると、ソースコードを処理単位でまとめておいて可読性を上げることができるのでJavascript(の場合は変数スコープ事情などもありますが)を書くときはよくやるのですが・・・残念。

やはり現状で最適な使い方としてはWordPressカスタマイズ時における使い方と思うので、以後は無名関数を使っていきたいですね。