PHP の世代交代が進んでますね!
いい加減 PHP 5.2 に対応しなくてもいい流れになって欲しいものですが、レンタルサーバーによっては未だ 5.2 のところもあるとかないとか。
5.2 はすっぱり諦めて、無名関数を使いましょう。
無名関数とは
参考&引用: PHP: 無名関数 – Manual
無名関数はクロージャとも呼ばれ、 関数名を指定せずに関数を作成できるようにするものです。
コールバック パラメータとして使う際に便利ですが、用途はそれにとどまりません。
他の言語なら当たり前のように使えていたのがようやく。
関数の名前をいちいち付けずに実行できる、ってやつです。
PHP 5.3 以上で対応。
無名関数、どういうときに使うか
PHP マニュアルの説明通り、コールバックで使うことが多いです。
その他にも変数に代入できたり。
// $wp に無名関数を代入 $wp = function ( $ver ) { printf( 'WordPress %s', $ver ); }; // 代入した関数が実行される。 $wp( '3.9' ); // 実行結果 → WordPress 3.9
無名関数 x WordPress
そんな無名関数、もちろん WordPress でも活躍します。
ぼくが WordPress 開発時に無名関数使うのは主としてアクションフック。
add_filter や add_action ですね。
ちょっとやってみましょう。
すごく簡単な WordPress のフック例
the_title で出力される関数を ★ で囲むだけのフックを作成。
よく見る形のフックですね。
/** * the_title 出力を★で囲むだけのフック * * @param $title * * @return string */ function add_text_the_title( $title ) { return '★' . $title . '★'; } add_filter( 'the_title', 'add_text_the_title' );
これを無名関数で置き換えてやります。
無名関数を使った WordPress のフック例
関数名はいらないので取り除いてやり、add_filter 2つ目の引数に無名関数を移動。
/** * the_title 出力を★で囲むだけのフック(無名関数 * * @param $title * * @return string */ add_filter( 'the_title', function ( $title ) { return '★' . $title . '★'; } );
簡単ですね!
無名関数になぜ置き換えるのか
コールバックや WordPress のアクションフックで使う関数は、基本的に他で使うことはありません。
無駄な関数名が増えると開発時に関数名が多すぎて混乱したり、開発環境での使いもしない関数名コードヒントが出たりしますよね。
そういった無駄がなくなります。
使わない理由がありませんね!
ホホまとめ
そろそろ PHP 5.2 対応は切り捨てていこうと思っているので、そんなタイミングで書いてみました。
さして新しくもない知識ですけれども、誰かのために少しでもなれば。
"
なるほど、このクロージャの使い方いいかも。 / PHP の無名関数が便利なので今すぐ使ったらいいと思うよ、WordPress ならフックとかでね(PHP 5.3.0以降 @hayashikejinanさんから