連想配列によって関数を呼び出すことができるこの関数を作成しました。ただし、スカラー型でのみテストしましたがints
、 、floats
、strings
、およびを受け取る関数に対しては正常に機能するはずbooleans
です。私はこれを非常に速く書きましたが、間違いなく複数の方法で改善できます。
function call_user_func_assoc($function, $array){
$matches = array();
$result = array();
$length = preg_match_all('/Parameter #(\d+) \[ <(required|optional)> \$(\w+)(?: = (.*))? ]/', new ReflectionFunction($function), $matches);
for($i = 0; $i < $length; $i++){
if(isset($array[$matches[3][$i]]))
$result[$i] = $array[$matches[3][$i]];
else if($matches[2][$i] == 'optional')
$result[$i] = eval('return ' . $matches[4][$i] . ';');
else
throw new ErrorException('Missing required parameter: $' . $matches[3][$i]);
}
call_user_func_array($function, $result);
}
次のように使用できます。
function basicFunction($var1, $var2 = "default string", $var3 = 2, $var4 = 5){
var_dump(func_get_args());
}
call_user_func_assoc('basicFunction', array('var1' => "Bob", 'var4' => 30));
どの出力:
array(4) {
[0]=>
string(3) "Bob"
[1]=>
string(14) "default string"
[2]=>
int(2)
[3]=>
int(30)
}