php:如何使用name作为变量调用对象及其方法

时间:2013-11-01 19:11:53

标签: php oop reflection

我需要为我的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()'找不到或函数名称无效'错误。

如何通过名称从变量和函数名称调用类的新实例作为变量?

1 个答案:

答案 0 :(得分:1)

我认为你的意思是:

$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

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