Callback 関数の戻り値を得たい場合

Callback 関数の戻り値を得たい場合

2017.07.04

そうそうあることではないけれど、Callback関数をそのまま呼び出し元の変数に入れたい場合、少し困る。Callback 関数の中で必ず return してくれるか解らない為だ。

そもそもこういうことはやらないのが身の為なんだけども、どうしても必然性に駆られたので。

PHP 5.6から可変長引数を使える様になったので、楽に書ける。

?php function callback_delegate ($_call, $_args, $_default){ if(!is_callable($_call)){ return $_default; } $ret = $_call(...$_args); // 可変長引数は PHP 5.6 から return (is_null($ret)) ? $_default : $ret; } function test ($call){ return callback_delegate($call, ["a", "b", "c"], "123456"); } // こっちは return していないので、 defaultの値 "123456" になる。 $n = test(function($_a, $_b, $_c){ $_str = $_a.$_b.$_c."defgh"; }); // こっちは return しているので、"abcdef" になる。 $m = test(function($_a, $_b, $_c){ $_str = $_a.$_b.$_c."defgh"; return $_str; }); var_dump($n); // "123456" var_dump($m); // "abcdefgh" ?