如果通过变量调用方法,则类不会自动加载


Class doesn't autoload if method is called through a variable

我想将变量作为对通过字符串调用的静态方法的引用传递,因此我不能使用call_user_funccall_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似乎是唯一的选择...