叫我刚刚升级到PHP 5.5.3和我注意到,Underscore.php抛出一个奇怪的错误:Underscore.php投掷非静态方法__ ::调用()不应该静态
Non-static method __::invoke() should not be called statically
有问题的代码是造成此错误是这样的:
$params = \__::invoke($params, function($value) {
...
});
通过Underscore.php源耕耘,我不明白为什么被抛出这个错误,因为以invoke
呼叫应当由办理__callStatic
处理程序:
public static function __callStatic($name, $arguments) {
$mixins =& self::getInstance()->_mixins;
return call_user_func_array($mixins[$name], $arguments);
}
我不想搞乱PHP中的错误报告设置,因为这意味着PHP设置会改变整个堆栈。
我目前的解决方法是:
$__ = new \__();
$params = $__->invoke($params, function($value) {
...
});
这是笨拙的,至少可以说。有没有更好的办法?
不确定你的答案是什么。 'invoke'方法确实存在,只是不是静态的。所以调用'__ :: invoke'会触发'__callStatic',它会调用'__'实例的'invoke',我明白了,谢谢。 – Luke
'__callStatic'不*被调用。阅读我的答案并运行我的第一个例子。 :) – Matthew