Как разрешить предупреждение строгих стандартов для разных сигнатур методов в версиях Joomla

При обновлении расширения для поддержки Joomla 3.x мы столкнулись с несколькими случаями, когда сигнатура для функции изменилась с 2,5 и появилась предупреждение Strict standards.

Например, в классе JTable _getAssetParentId() был изменен с

protected function _getAssetParentId($table = null, $id = null)
{
    ...
}

к этому в Joomla 3.x:

protected function _getAssetParentId(JTable $table = null, $id = null)
{
    ...
}

Это небольшая разница, но достаточно предупредить предупреждение.

Глядя на другие расширения, поддерживающие Joomla 2.5 и 3.0, используя один файл класса, они, похоже, просто игнорируют проблему.

Очевидно, что если мы исправим предупреждение для 3.x, то 2.5 устанавливает с броском предупреждение ...

«Решения», которые не подходят для нас, включают:

  • с использованием двух отдельных файлов класса версии
  • выключение предупреждений

Как вы разрешаете этот конфликт?

7 голосов | спросил Craig 23 PMpWed, 23 Apr 2014 17:13:04 +040013Wednesday 2014, 17:13:04

3 ответа


9

На работе мы пытаемся разрешить все предупреждения, ошибки и строгие стандарты безопасности PHP. В подобных ситуациях, когда подписи различны, нет другого способа разрешить это другим, используя два отдельных файла классов, специфичных для версии. Мне любопытно, почему это не вариант для вас?

Файлы классов, специфичные для версии, на самом деле просты в реализации, но немного сложнее в обслуживании, так как вы будете обновлять некоторый код в нескольких местах. Самое лучшее, что можно сделать в этой ситуации - IMO, - это иметь корневую папку src/, которая содержит все ваши классы компонентов для автоматической загрузки, а затем использовать любые классы версии 2.5 или 3.x в overrides/$VERSION. Затем вы можете настроить автозагрузчик для поиска в соответствующих местах в соответствующем порядке на основе текущей версии.

Я действительно хочу, чтобы был более простой способ, но PHP не позволяет перегружать динамические методы, где вы можете сделать соответствие подписей.

ответил Don Gilbert 23 PMpWed, 23 Apr 2014 17:25:09 +040025Wednesday 2014, 17:25:09
4

Насколько я знаю, вы не можете решить это строгое предупреждение. Поскольку подписи всегда будут отличаться либо от 2.5, либо от 3.x.

Либо исправить его для 3.x и проигнорировать в 2.5, либо наоборот.

В продуктивной среде вы никогда не увидите этого предупреждения, так как вы должны показывать только строгие предупреждения в настройках разработки.

ответил Bakual 23 PMpWed, 23 Apr 2014 17:26:49 +040026Wednesday 2014, 17:26:49
1

Существует серьезная проблема с состоянием PHP, некоторые серверы по-прежнему используют 5.2, в то время как другие остаются в безопасности на 5.3 или 5.4. Есть также некоторые, которые остаются на уровне 5.5.

Это приводит к серьезной проблеме в «поддержке». Если вы пойдете на рынок различных версий, я бы сказал, что 5.2 является наиболее широко используемым, но небезопасным. 5.3 и 5.4 - это то, что ищет Joomla в 3, однако, если пользователь находится в версии 5.5, строгие стандартные предупреждения могут отличаться от других версий.

Хотя PHP не выходит за верх с ошибками, так как в нем все еще «работает» его предупреждение о том, что так оно и делается не так, как текущая версия предназначена для его обработки, но все равно будет работать. Таким образом, для большинства разработчиков предупреждения Уведомление и строгие стандарты могут быть в основном проигнорированы, поскольку, если вы исправите их, вы можете запустить другой в другой версии PHP.

Удаление их всех лучше всего для разработчика OCD. Очевидные ошибки должны быть исправлены, но такие, которые вы описываете, приведут к много внимания Joomla к одной версии PHP, что приведет к гораздо большей работе по обновлению его версии PHP.

Единственное истинное исправление для этого - в «начальной загрузке» Joomla для тестирования версии PHP и загрузки файлов на основе этого, это может привести к удвоению базового размера установки Joomla, а также к тому, чтобы сделать больше работы. для ошибок, которые фактически не разбивают какой-либо сайт. Ответ Дона Гилберта затрагивает это более подробно.

Мой ответ довольно странный, но я чувствую, что он может помочь другим понять полный беспорядок PHP.

ответил Jordan Ramstad 23 PMpWed, 23 Apr 2014 23:24:18 +040024Wednesday 2014, 23:24:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132