您有多种选择可以做到这一点
- 使用字符串变量作为类名和方法名
- 将回调与 call_user_func() 一起使用
- 使用反射
以下示例将演示这些选项:
<?php
namespace vendor\foo;
class Bar {
public static function foo($arg) {
return 'foo ' . $arg;
}
}
选项 1:对类名和方法名使用字符串变量:
/* prepare class name and method name as string */
$class = '\vendor\foo\Bar';
$method = 'foo';
// call the method
echo $class::$method('test'), PHP_EOL;
// output : foo test
选项 2:Perpare 一个回调变量并将其传递给call_user_func()
:
/* use a callback to call the method */
$method = array (
'\vendor\foo\Bar', // using a classname (string) will tell call_user_func()
// to call the method statically
'foo'
);
// call the method with call_user_func()
echo call_user_func($method, 'test'), PHP_EOL;
// output : foo test
选项 3:使用 ReflectionMethod::invoke() :
/* using reflection to call the method */
$method = new \ReflectionMethod('\vendor\foo\Bar', 'foo');
// Note `NULL` as the first param to `ReflectionMethod::invoke` for a static call.
echo $method->invoke(NULL, 'test'), PHP_EOL;
// output : foo test