PHP 5.4严格标准如何使子方法的不同,无序参数与父方法兼容?

时间:2015-04-27 11:35:41

标签: php methods joomla standards-compliance

我正在使用旧的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中的任何一个调用都改变。

1 个答案:

答案 0 :(得分:0)

参数的顺序对PHP解释器本身无关紧要,因为它不会按名称检查参数兼容性。但是您有不同的类型参数。其中一些是引用,一些是变量 - 这使得声明不兼容。

因此,您实际上可以通过更改参数顺序来解决此问题,以便在两个声明中匹配类型。

$view参数是对象还是简单类型?如果它是一个对象,您可能根本不必将其作为参考传递。