我想将变量作为对通过字符串调用的静态方法的引用传递,因此我无法使用call_user_func
或call_user_func_array
(无引用)。
如图in this example所示,我想简单地通过变量的名称来调用函数:
$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,我对它们自动加载没有任何问题。
答案 0 :(得分:1)
如果您正在运行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
似乎只是选项...