我正在使用旧的Joomla 2.5调试Joomla网站。在转向php 5.4时,我们遇到了广泛讨论的严格标准错误。大多数都很容易修复。我有一个最后的错误,证明更难。
严格标准:JCacheControllerView :: get()的声明应该是 兼容JCacheController :: get($ id,$ group = NULL)in /home/XXXXXX/public_testing/libraries/joomla/cache/controller/view.php 在第137行
研究表明这样的建议: Declaration of Methods should be Compatible with Parent Methods in PHP
JCacheController定义
public function get($id, $group = null)
JCacheControllerView扩展了JCacheController并定义:
public function get(&$view, $method, $id = false, $wrkarounds = true)
所以我尝试将声明更改为具有相同的参数和相同的默认值: JCacheController定义
public function get($id=false, $group = null, &$view = null, $method = null, $wrkarounds = true)
JCacheControllerView扩展了JCacheController并定义:
public function get(&$view = null, $method = null, $id = false, $wrkarounds = true, $group = null)
结果是:
严格标准:JCacheControllerView :: get()的声明应该是 兼容JCacheController :: get($ id = false,$ group = NULL, & $ view = NULL,$ method = NULL,$ wrkarounds = true)in /home/freedibl/public_testing/libraries/joomla/cache/controller/view.php 在第137行
这可能是因为参数的顺序不一样吗?如何在不改变原始方法调用的情况下解决这个问题?这两种方法都被广泛使用,并且很难将整个joomla中的任何一个调用都改变。
答案 0 :(得分:0)
参数的顺序对PHP解释器本身无关紧要,因为它不会按名称检查参数兼容性。但是您有不同的类型参数。其中一些是引用,一些是变量 - 这使得声明不兼容。
因此,您实际上可以通过更改参数顺序来解决此问题,以便在两个声明中匹配类型。
$view
参数是对象还是简单类型?如果它是一个对象,您可能根本不必将其作为参考传递。