最佳做法是什么?
$method = 'setId';
带反射
$userClass = new ReflectionClass(User::class);
$userClass->getMethod($method)->invoke($user, [ 45 ]);
或动态
$user->$method(45);
在这种情况下,没有检查方法是否存在
答案 0 :(得分:1)
PHP中存在一个错误,可以防止在使用Reflection API调用函数或方法时严格解释标量类型声明。
示例:
class C
{
public function m(string $x)
{
var_dump($x);
}
}
通过反思打电话(不要这样做!)
declare(strict_types=1);
$object = new C();
$arguments = [1];
$method = new ReflectionMethod($object, 'm');
$method->invokeArgs($object, $arguments);
结果:
string(1) "1"
结论:不要使用Reflection来调用方法。