PHP 5.4 Строгие стандарты Как сделать несопоставимые, неупорядоченные параметры дочернего метода совместимыми с родительским методом?

Я отлаживаю сайт 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.

0

Решение

Порядок параметров не имеет значения для интерпретатора PHP как такового, поскольку он не проверяет совместимость параметров по имени. Но у вас разные типы параметров. Некоторые из них являются ссылками, а некоторые являются переменными — это делает объявления несовместимыми.

Таким образом, вы на самом деле можете решить эту проблему, изменив порядок параметров, чтобы типы совпадали в обоих объявлениях.

Является $view параметр объекта или простой тип? Если это объект, вам, вероятно, вообще не нужно передавать его как ссылку.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]