我想将变量作为对通过字符串调用的静态方法的引用传递,因此我不能使用call_user_func
或call_user_func_array
(没有引用(。
如本例所示,我想简单地通过其变量的名称调用函数:
$f = '\bbn\appui\history::trigger';
if ( is_callable($f) ){
$tmp = $f($table, $kind, $moment, $values, $where);
}
我得到:
致命错误:调用未定义的函数 \bbn\appui\history::trigger((
所以它是可调用的,但未定义??有趣的是,如果我$f更改为:
'\\bbn\\appui\\history::trigger'
(不要问我为什么尝试!(,我得到:
致命错误:include((:无法重新声明类 bbn\appui\history
这个函数被调用为另一个函数的回调,所以通过变量调用它对我来说非常重要。有人会知道如何让它工作吗?
我使用 Composer 及其自动加载类,我所有的类都是 psr-0,我对它们的自动加载没有任何问题。
如果您运行的是 PHP 5.3.x,则可以使用 ReflectionMethod::invoke
:
$f = '\bbn\appui\history::trigger';
list($class, $method) = explode('::', $f);
$rm = new ReflectionMethod($class, $method);
$rm->invoke(null, &$myvar);
如果您有较新的PHP版本,eval
似乎是唯一的选择...