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

时间:2013-10-10 18:06:17

标签: php composer-php

我想将变量作为对通过字符串调用的静态方法的引用传递,因此我无法使用call_user_funccall_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,我对它们自动加载没有任何问题。

1 个答案:

答案 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似乎只是选项...