web-dev-qa-db-fra.com

Comment résoudre l'avertissement `Strict standards` pour différentes signatures de méthodes dans les versions de Joomla

Lors de la mise à jour d'une extension pour prendre en charge Joomla 3.x, nous avons rencontré quelques cas où la signature d'une fonction a été modifiée depuis la version 2.5 et entraîne un avertissement Strict standards.

Par exemple, dans la classe JTable, la _getAssetParentId() avait changé de

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

à cela dans Joomla 3.x:

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

C'est une petite différence mais, c'est suffisant pour lancer l'avertissement.

En regardant d'autres extensions qui prennent en charge Joomla 2.5 et 3.0 en utilisant un fichier de classe unique, elles semblent ignorer simplement le problème.

Évidemment, si on corrige l'avertissement pour 3.x, alors la 2.5 installe avec jeter l'avertissement…

Les "solutions" qui ne sont pas une option pour nous incluent:

  • en utilisant deux fichiers de classe distincts spécifiques à la version
  • éteindre les avertissements

Comment résolvez-vous ce conflit?

7
Craig

Au travail, nous essayons de résoudre tous les PHP avertissements, erreurs et violations strictes des normes. Dans des situations comme celle-ci, où les signatures sont différentes, il n’est pas possible de les résoudre autrement en utilisant deux classes distinctes, spécifiques à la version. Je suis curieux de savoir pourquoi ce n’est pas une option pour vous?

Les fichiers de classe spécifiques à la version sont en réalité simples à implémenter, mais un peu plus difficiles à gérer, car vous allez mettre à jour du code à plusieurs endroits. La meilleure chose à faire dans cette situation, IMO, est d’avoir un dossier racine src/ Qui contient toutes vos classes de composants pour le chargement automatique, puis d’avoir des classes spécifiques à la version 2.5 ou 3.x dans un overrides/$VERSION dossier. Vous pouvez ensuite configurer l'autochargeur pour qu'il recherche dans les emplacements appropriés dans l'ordre approprié, en fonction de la version actuelle.

J'aimerais vraiment qu'il y ait un moyen plus simple, mais PHP ne permet pas la surcharge de méthodes dynamiques où vous pouvez faire correspondre les signatures.

9
Don Gilbert

À ma connaissance, vous ne pouvez pas résoudre cet avertissement strict. Parce que les signatures seront toujours différentes dans les versions 2.5 ou 3.x.

Soit le réparer pour 3.x et ignorer dans 2.5 ou vice versa.

Dans un environnement productif, vous ne devriez de toute façon jamais voir cet avertissement, vous ne devriez afficher que des avertissements stricts dans les paramètres de développement.

4
Bakual

Il y a un problème majeur avec l'état de PHP: certains serveurs utilisent toujours la version 5.2, tandis que d'autres restent en sécurité à 5.3 ou 5.4. Il y en a aussi qui restent à 5,5.

Cela pose un gros problème de "quoi soutenir" Si vous vous reportez au marché des différentes versions, je dirais que la version 5.2 est la plus utilisée, mais peu sûre. Les versions 5.3 et 5.4 sont ce que Joomla recherche dans la version 3; toutefois, si un utilisateur utilise la version 5.5, les avertissements standard stricts peuvent être différents des autres versions.

Bien que PHP ne surpasse pas les erreurs, dans ce cas, il "fonctionne" toujours, il avertit que la manière dont il est fait n’est pas la manière dont la version actuelle est censée le gérer, mais restera Donc, pour la plupart des développeurs, les avertissements de Notice et Strict Standards peuvent être principalement ignorés car si vous en corrigez un, vous pouvez en déclencher un autre dans une version différente PHP.

Les supprimer tous est préférable pour un développeur OCD. Les erreurs évidentes doivent être corrigées, mais celles que vous décrivez conduiraient à concentrer Joomla sur une PHP version), ce qui entraînerait beaucoup plus de travail pour la mise à niveau de ses PHP version aussi bien.

Le seul vrai correctif à cela est dans le "bootstrap" de Joomla pour tester la version PHP et charger les fichiers en fonction de cela, cela pourrait conduire à un doublement de la taille de l'installation de base de Joomla, mais aussi il faut donc travailler davantage pour les erreurs qui ne brisent aucun site, comme le dit la réponse de Don Gilbert.

Ma réponse est un peu bizarre, mais j'estime qu'elle peut aider les autres à comprendre le désordre total PHP est.

1
Jordan Ramstad