假设我有一个存储在变量中的可调用对象:
$callable = function($foo = 'bar', $baz = ...) { return...; }
我该如何获取“bar”?
if (is_callable($callable)) {
return func_get_args();
}
不幸的是,func_get_args()
仅适用于当前函数,是否有可能获取关键字参数对?
假设我有一个存储在变量中的可调用对象:
$callable = function($foo = 'bar', $baz = ...) { return...; }
我该如何获取“bar”?
if (is_callable($callable)) {
return func_get_args();
}
不幸的是,func_get_args()
仅适用于当前函数,是否有可能获取关键字参数对?
$f = new ReflectionFunction($callable);
$params = $f->getParameters();
echo $params[0]->getDefaultValue();
我发现这个问题是因为我正在寻找获取可调用对象参数的方法,而不仅仅是函数本身。我的情况是
class MyClass{
public function f(){
// do some stuff
}
}
$myclass = new MyClass();
$callable = array($myclass, "f);
is_callable
函数进行处理。您可以使用第三个参数获取函数的名称。然后,您必须检查您的回调函数是函数还是(类/对象)方法。否则,Reflection
类会出错。if($callable instanceof Closure){
$name = "";
is_callable($callable, false, $name);
if(strpos($name, "::") !== false){
$r = new ReflectionMethod($name);
}
else{
$r = new ReflectionFunction($name);
}
}
else{
$r = new ReflectionFunction($callable);
}
$parameters = $r->getParameters();
// ...
$name
始终使用 ::
(有一些例外情况),此函数也返回 ReflectionFunctionAbstract::isStatic()
的正确值。
Closures
可能会更容易。在那里,你可以做类似的事情。$closure = Closure::fromCallable($callable);
$r = new ReflectionFunction($closure);
ReflectionFunction
和ReflectionMethod
,但我无法测试,因为我没有使用PHP>=7.0。
ReflectionFunction
能够用于任何可调用对象吗?(例如类方法和静态方法?) - SparK