関数:引数に無名関数を使う
$input = array(1, 2, 3, 4, 5, 6);
// 新たな無名関数を作って、変数に代入する
$filter_even = function($item) {
return ($item % 2) == 0;
};
// array_filter は、データと関数を受け取る
$output = array_filter($input, $filter_even);
// 関数をいったん変数に代入せずに、直接このように書いてもかまわない
$output = array_filter($input, function($item) {
return ($item % 2) == 0;
});
print_r($output);
関数型プログラミング:useを使う
関数の返り値を別の関数にする(高階関数)
外部のスコープからインポートした変数に対してグローバル変数を介さずにアクセス
参考リンク:Functional-Programming
参考リンク:関数型プログラミングを噛み砕く
function criteria_greater_than($min)
{
return function($item) use ($min) {
return $item > $min;
};
}
$input = array(1, 2, 3, 4, 5, 6);
// array_filter を使い、入力値とフィルター関数を指定する
$output = array_filter($input, criteria_greater_than(3));
print_r($output); // items > 3
無名関数とuse
参考リンク:Functional-Programming
$message = 'hello';
// "use" がない場合
$example = function () {
var_dump($message);
};
// エラー
$example();
// $message を引き継ぎます
$example = function () use ($message) {
var_dump($message);
};
// 'string(5) "hello" を出力
$example();
call_user_func_array() を使う!
参考リンク:call_user_func_array
function foobar($arg, $arg2) {
echo __FUNCTION__, " got $arg and $arg2\n";
}
// foobar() 関数に引数を 2 つ渡してコールします
call_user_func_array("foobar", array("one", "two"));
class foo {
function bar($arg, $arg2) {
echo __METHOD__, " got $arg and $arg2\n";
}
}
// $foo->bar() メソッドに引数を 2 つ渡してコールします
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));