web-dev-qa-db-fra.com

Correction de l'aide: Obsolète: méthode non statique Erreur JoomSefLogger :: Log ()

J'utilise le composant Artio Joomsef avec le plug-in Virtuemart principalement pour la manipulation de sitemap. Cependant, chaque fois que je l'active, l'erreur suivante s'affiche dans les pages du produit:

Obsolète: la méthode non statique JoomSefLogger :: Log () ne doit pas être appelée de manière statique, en supposant que $ this provient d'un contexte incompatible dans /mnt/data/vhosts/mydomain/httpdocs/components/com_sef/sef_ext/com_virtuemart.php à la ligne 404

Cette erreur concerne la fonction ci-dessous:

Function GetProductManufacturerId($productId)
{
    $database = JFactory::getDBO();

    $database->setQuery("SELECT `virtuemart_manufacturer_id` FROM `#__virtuemart_product_manufacturers` WHERE `virtuemart_product_id` = '{$productId}'");
    $mId = $database->loadResult();
    if (is_null($mId)) {
        JoomSefLogger::Log("Manufacturer for product ID {$productId} not found.", $this, 'com_virtuemart');
    }

    return $mId;
}

Est-il possible de modifier la fonction pour que l'erreur ne s'affiche plus? Malheureusement, Artio ne fournit pas de support pour l'extension à moins que vous ne l'achetiez en complément du composant lui-même, et le forum de support n'est pas très actif.

Je ne suis pas chaud avec php, donc j'espère que quelqu'un pourra vous donner des conseils afin que je puisse mettre à jour le code avec et utiliser un remplacement afin d'éviter qu'il ne réapparaisse.

Cela fonctionne sur Joomla 3.6.4 VM 3.0.18 et php 5.6.

Merci d'avance Donna

1
Dtorr1981

Il s’agit d’un avertissement plutôt que d’une erreur. Il ne faut donc pas casser votre site. La solution la plus simple consisterait à désactiver le signalement strict des erreurs (le signalement des erreurs devrait de toute façon être désactivé sur tout site actif.)

de php.net:

Dans PHP 5, l'appel de méthodes non statiques génère un avertissement de niveau E_STRICT.

Dans PHP 7, l'appel de méthodes non statiques est obsolète et génère un avertissement E_DEPRECATED. La prise en charge de l'appel de méthodes non statiques peut être supprimée à l'avenir.

En changeant JoomSefLogger::Log à (new JoomSefLogger)->Log peut résoudre le problème, tout comme rendre la fonction JoomSefLogger statique. Notez que tous les correctifs à l'avenir peuvent toutefois remplacer ces modifications.

Cela dit, je pense que la solution la plus judicieuse serait de

  1. Assurez-vous que Virtuemart et le plugin sont corrigés à la dernière version au cas où cela aurait déjà été corrigé.
  2. Contactez le développeur pour lui faire savoir que son plug-in génère une erreur. Je vois que c'est un plug-in payant, alors vous espérez qu'ils auront une certaine responsabilité vis-à-vis de leurs utilisateurs pour la correction des bugs.
1
Richard B