web-dev-qa-db-ja.com

修正のヘルプ:非推奨:非静的メソッドJoomSefLogger :: Log()エラー

私は主にサイトマップ操作のためにVirtuemartプラグインでArtio Joomsefコンポーネントを使用していますが、それを有効にするたびに、製品ページに次のエラーが表示されます。

非推奨:非静的メソッドJoomSefLogger :: Log()を静的に呼び出すことはできません。/mnt/data/vhosts/mydomain/httpdocs/components/com_sef/sef_ext/com_virtuemart.phpの行404の非互換コンテキストから$ thisを想定します

このエラーは、以下の関数に関連しています。

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;
}

エラーが表示されないように関数を変更する方法はありますか?残念ながら、Artioは、コンポーネント自体のトップアップとして購入しない限り、拡張機能のサポートを提供していません。サポートフォーラムはあまりアクティブではありません。

私はPHPに熱心ではないので、誰かがアドバイスを提供してコードを更新し、オーバーライドを使用してコードが再び表示されないようにできることを願っています。

これはJoomla 3.6.4 VM 3.0.18およびphp 5.6で実行されています。

事前にありがとうドナ

1
Dtorr1981

これはエラーではなく警告であるため、サイトを破壊することはなく、最も簡単な解決策は、厳密なエラー報告をオフにすることです(エラー報告は、とにかく実際のサイトではオフにする必要があります)。

php.netから:

PHP 5では、静的でないメソッドを静的に呼び出すと、E_STRICTレベルの警告が生成されます

PHP 7では、静的でないメソッドを静的に呼び出すことは非推奨であり、E_DEPRECATED警告を生成します。静的でないメソッドを静的に呼び出すサポートは将来削除される可能性があります。

変更JoomSefLogger::Logから(new JoomSefLogger)->Logは、JoomSefLogger関数を静的にする場合と同様に、修正する場合があります。ただし、今後のパッチでは、このような変更が上書きされる可能性があることに注意してください。

とは言っても、最も賢明な解決策は

  1. Virtuemartとプラグインの両方が最新バージョンにパッチされていることを確認してください。
  2. 開発者に連絡して、プラグインがエラーをスローしていることを知らせます。私はそれが有料のプラグインだと思うので、あなたは彼らがバグ修正を行うために彼らのユーザーに対していくらかの責任を負うことを望みます。
1
Richard B