Я отлаживаю сайт Joomla, используя старый Joomla 2.5. При переходе к php 5.4 мы столкнулись с широко обсуждаемыми ошибками строгих стандартов. Большинство было легко исправить. У меня есть одна последняя ошибка, которая оказывается труднее.
Строгие стандарты: объявление JCacheControllerView :: get () должно быть
совместим с JCacheController :: get ($ id, $ group = NULL) в
/home/XXXXXX/public_testing/libraries/joomla/cache/controller/view.php
по линии 137
Исследования показывают такой совет:
Объявление методов должно быть совместимо с родительскими методами в 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) в
/home/freedibl/public_testing/libraries/joomla/cache/controller/view.php
по линии 137
Может ли это быть, потому что параметры не в том же порядке? Как я могу это исправить, не изменяя исходные вызовы методов? Оба метода широко используются, и было бы трудно изменить каждый вызов на любой другой в Joomla.
Порядок параметров не имеет значения для интерпретатора PHP как такового, поскольку он не проверяет совместимость параметров по имени. Но у вас разные типы параметров. Некоторые из них являются ссылками, а некоторые являются переменными — это делает объявления несовместимыми.
Таким образом, вы на самом деле можете решить эту проблему, изменив порядок параметров, чтобы типы совпадали в обоих объявлениях.
Является $view
параметр объекта или простой тип? Если это объект, вам, вероятно, вообще не нужно передавать его как ссылку.
Других решений пока нет …