タグ: 関数

  • PHP の無名関数が便利なので今すぐ使ったらいいと思うよ、WordPress ならフックとかでね(PHP 5.3.0以降

    PHP の無名関数が便利なので今すぐ使ったらいいと思うよ、WordPress ならフックとかでね(PHP 5.3.0以降

    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 対応は切り捨てていこうと思っているので、そんなタイミングで書いてみました。

    さして新しくもない知識ですけれども、誰かのために少しでもなれば。