我一直在寻找很多,但我找不到任何解决方案。我也不确切知道这是否可能。
所以在这里我有2个案例可以做:
案例1:
$callback = function(Object $obj, $var) {
// Do stuff
}
案例2:
$callback = function($var) {
// Do stuff
}
现在我将调用这样的函数:
call_user_func_array($callback, [new Object, 'some text'])
但是现在有一个问题。在案例2中,$var
将被视为对象参数。当不使用对象时,如何仅将字符串参数发送到调用?我不希望订单改变,对象必须是第一个。
P.S。我注意到这在Symfony框架中是可能的。我将继续研究Symfony如何做到这一点,任何提示都表示赞赏!
感谢阅读!
答案 0 :(得分:1)
您可以使用反射。
示例:
function call(callable $callback, $var, object $obj = null)
{
$callbackArguments = array();
$parameters = (new ReflectionFunction($callback))->getParameters();
foreach ($parameters as $parameter) {
if ($parameter->getType() == 'object') {
$callbackArguments[] = $obj;
} else {
$callbackArguments[] = $var;
}
}
return call_user_func_array($callback, $callbackArguments);
}