32

現在、PHPで大規模なプラットフォームを使用しています。

それがホストされているサーバーは最近PHP5.4にアップグレードされました。

それ以来、私は次のような多くのエラーメッセージを受け取りました。

[2012年5月26日土曜日19:04:41][エラー]PHPの厳格な標準:非静的メソッドConfig :: getData()は、/ xxx /Config.inc.phpの互換性のないコンテキストから$thisを想定して、静的に呼び出されるべきではありません。 35行目

サンプルメソッドは次のように定義されています(「static」キーワードがないことに注意してください)。

function &getData() {
            $configData =& Registry::get('configData', true, null);

    if ($configData === null) {
        // Load configuration data only once per request, implicitly
        // sets config data by ref in the registry.
        $configData = Config::reloadData();
    }

    return $configData;
}

これまで問題は発生していません。エラーメッセージ(アプリケーションのクラッシュを引き起こす)は、PHP5.4への最近のアップグレードに関連している可能性があります。

staticキーワードの欠如を「無視」するように変更できるPHP設定はありますか?

4

4 に答える 4

44

静的に呼び出す必要がある場合は、E_STRICTから削除するか、メソッドを静的にすることができます。error_reporting()私の知る限り、静的メソッドと非静的メソッドの両方として呼び出すことができるメソッドを持つ(厳密な)方法はありません。また、さらに厄介なことに、同じ名前の2つのメソッドを使用することはできません。1つは静的で、もう1つは非静的です。

于 2012-05-26T18:15:31.863 に答える
31

警告メッセージを無効にすることは、問題を解決する方法ではありません。PHPコアは引き続き機能しますが、危険な仮定とアクションが発生します。

PHPが何かを想定する必要があるというエラーを決して無視しないでください!!!!

クラスがシングルトンとして編成されている場合は、いつでも関数getInstance()を使用してから、getData()を使用できます。

Likse:

$classObj = MyClass::getInstance();
$classObj->getData();

クラスがシングルトンでない場合は、

 $classObj = new MyClass();
 $classObj->getData();
于 2015-03-02T14:08:38.227 に答える
10

プロジェクトの厳密なエラーを非表示にすることはお勧めしません。つまり、メソッドを静的に変更するか、オブジェクトの新しいインスタンスを作成してみてください。

$var = new YourClass();
$var->method();

PHP 5.4以降、新しい方法を使用して同じことを行うこともできます。

(new YourClass)->method();

お役に立てば幸いです。

于 2016-05-15T23:05:32.383 に答える
-4

私はこれを次のように1つのコード行で解決しました:ファイルindex.phpで、テンプレートルートで、このコード行の後に:

defined('_JEXEC')またはdie('制限付きアクセス');

この行を貼り付けます:ini_set('display_errors'、'Off');

くよくよせずに楽しくやろうぜ...

Jenioによる投稿。

于 2015-03-02T13:53:03.523 に答える