如何获取运行时确定的可调用参数数?
2022-08-30 23:41:19
注意:通过编写此问题,我已经发现我对使用新的语言功能过于执着。更干净的解决方案是使用策略模式来代替...不过,我很好奇是否有适当的方法来解决这个问题。
TL;DR:你能在PHP中反思一个通用的可调用,而不诉诸于手动类型检查各种可调用的吗?
在 PHP 5.4 中,我们有了一个新的类型提示:可调用。这似乎很有趣。我想我会通过以下方式来利用这一点:
<?php
public function setCredentialTreatment(callable $credentialTreatment) {
// Verify $credentialTreatment can be used (ie: accepts 2 params)
... magic here ...
}
?>
到目前为止,我的思路是对可调用对象进行一系列类型检查,并从Reflectrection*类中推断出要使用的类型:
<?php
if(is_array($callable)) {
$reflector = new ReflectionMethod($callable[0], $callable[1]);
} elseif(is_string($callable)) {
$reflector = new ReflectionFunction($callable);
} elseif(is_a($callable, 'Closure') || is_callable($callable, '__invoke')) {
$objReflector = new ReflectionObject($callable);
$reflector = $objReflector->getMethod('__invoke');
}
// Array of ReflectionParameters. Yay!
$parameters = $reflector->getParameters();
// Inspect parameters. Throw invalidArgumentException if not valid.
?>
现在,对我来说,这感觉太复杂了。我是否错过了某种捷径来实现我在这里想要做的事情?任何见解都将受到欢迎:)