0

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

4

1 回答 1

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似乎是唯一的选择......

于 2013-10-10T18:45:59.747 回答