ページ

2013/02/24

PHP5.3の無名関数がcreate_function関数より便利!

PHPで配列から特定の値を除去する関数を作っていたのだけど
create_functionに値を渡して判定してarray_filterで除去するのが良いかと思った。
が、create_functionに値を渡すことができなかった…!

参考
無名関数(クロージャ) « PHP6.jp
無名関数/クロージャ基礎 | PHPサンプル実験室
Tricorn Labs » PHP 5.3を使ってみました。の機能1. クロージャ(無名関数)

PHP: 無名関数 - Manualでも混同されているけど無名関数とクロージャは別物なので注意。

ということで作った関数がこちら。
function array_remove_all($array, $value){
    $callback = function($v) use($value){
        return $v !== $value;
    };
    return array_filter($array, $callback);
}
use を使うことで外からの変数を無名関数に渡すことができる。
array_filterでコールバック関数にcreate_functionを指定すると
変数と処理を文字列で記述しなくてはならなかったので IDEの支援なしで複雑なものを書くのは厳しかった。
せいぜい簡単なワンライナーで書ける処理だけだったので無名関数でPHPのコードとして書けるのは嬉しい。
今度から無名関数を使っていきたい。