PHP:如何使用名称作为变量调用对象及其方法


php: how to call an object and its methods with name as variable

我需要为我的php项目的插件创建一个通用调用器。我需要调用基于表单字段 (POST) 的模型:

    $moduleName = new ReflectionClass($module);
    $data = $moduleName->method($params);
    print_r($data);

这也不起作用:

    $data = call_user_func_array($moduleName.'::method',array($params));
    print_r($data);

为什么?

这是对的吗?我收到 ReflectionClass:method() "未找到或无效的函数名称"错误。

如何从变量中按名称调用类的新实例,并将函数名称也作为变量调用?

我想你的意思是:

$className  = 'YourClassName';
$methodName = 'classMethodName';
$module     = new $className();                // create new class instance
$data       = $module->{$methodName}($params); // call your method

如果$params是一个数组,并且您希望将其作为多个参数传递给您的方法:

$data = call_user_func_array(array($module, $methodName), $params);

由于您标记了此反射,因此这是另一种方法:

$module    = new $className();
$reflector = new ReflectionMethod($module, $methodName);
$reflector->invokeArgs($module, $params);  // call_user_func_array() equivalent

显然,如果您尝试调用的方法是静态的,则不需要实例化您的类。