Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php:如何使用名称作为变量调用对象及其方法_Php_Oop_Reflection - Fatal编程技术网

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

php:如何使用名称作为变量调用对象及其方法,php,oop,reflection,Php,Oop,Reflection,我需要为我的php项目的插件创建一个通用调用程序。我需要根据表单字段调用模型(POST): 这也不起作用: $data = call_user_func_array($moduleName.'::method',array($params)); print_r($data); 为什么? 是这样吗?我收到ReflectionClass:method()“未找到或函数名无效”错误 如何通过变量名和函数名(也作为变量)调用类的新实例?我想您的意思是: $className = 'Y

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

这也不起作用:

    $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
显然,如果试图调用的方法是静态的,则不需要实例化类

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