我正在开发一个插件系统,目前我被迫使用call_user_func_array
。这很慢并且使用记忆。
我的功能正常,看起来像这样:
public static function __callStatic($method, $args)
{
$plugins = self::_checkEventCache($method);
if( count($plugins) ) :
foreach( $plugins as $p ):
$tmp = call_user_func_array(array(self::$_installedPlugins[$p], $method), array(&$args));
endforeach;
endif;
self::$_current_event = $method;
}
我的问题是如何直接调用它或加快速度?我永远不会知道将来会附加多少论点。
摆脱call_user_func_array
的任何解决方案?
$tmp =
也没有解决这个问题。早些时候 - 当我没有使用静态时,它返回了一个值。我使用的旧代码是这样的:
$tmp = $this->_installedPlugins[$p]->{$method}($args);
if( $tmp !== NULL ){
$this->_event_result[$method] = $tmp;
}
当我使用静态类时,我需要获得相同的结果。
有什么想法吗?
答案 0 :(得分:0)
在我看来,你没有用$ tmp变量做任何事情。但它应该被分配一些价值。
无论如何我不确定你的插件方法调用是否也是静态的,所以我要描述两种情况。 第一个非静态插件方法调用:
在这种情况下,您可以像使用旧代码一样使用类似的方法调用
$tmp = self::$_installedPlugins[$p]->{$method}($args);
现在使用statuc插件调用的情况:
现在它有点棘手了,PHP显然不会让你在一个表达式中有两组::所以你必须绕过它:
$plug= self::$_installedPlugins[$p];
$tmp = $plug::{$method}($args);
我已经在PHP 5.4上测试了它,它似乎有效。