3

PHPでは、静的メソッドは静的メソッドと非静的メソッドの両方で使用でき、非静的メソッドは非静的メソッドでのみ使用できます。そのため、動的メソッドを静的に呼び出すとE_STRICTエラーが発生します。

例えば:

<?php

class Example
{
    public function foo() {
        return "Foo";
    }

    public static function bar() {
        return "Bar";
    }
}

$ex = new Example();

// Non-static call
echo $ex->bar();

// Static call on a non-static method
// PHP Error "Strict standards: Non-static method should not be called statically"
// ERROR NOT DETECTED BY PHPSTORM!
echo Example::foo();

最後の行は、この PHP エラーを生成します (これはロジックです)。 ここに画像の説明を入力

私は現在、一部の PHP ファイルで非静的メソッドを静的に呼び出す大規模な PHP アプリケーションに取り組んでいます。非常に古いバージョンの PHP では問題ありませんでしたが、最新の PHP バージョンに移行することにしました。

すべてのプロジェクト ファイルを手動でチェックして、この不正な構文が長すぎる (+ 1000 ファイル) ことを特定します。

PhpStorm の組み込みコード検査機能は、分析されたソース コード内のこのタイプのエラーを検出しません。なんで?何かを設定する必要がありますか?どのように?

以下は、PhpStorm での私の PHP コード検査構成です。

ここに画像の説明を入力

ありがとう!

4

3 に答える 3

5

その検査はここでうまく機能します(証明)。

  1. このファイルを試してくださいCode | Inspect Code...。このファイルを最初から再分析する必要があります。もっといい?

  2. File | Invalidate Caches...何もない場合 -- IDE を再起動してください


PSこのインスペクションをプロジェクト全体でのみ実行する
ことに関心がある場合は、ファイルごとに 完全に実行するよりもはるかに高速です。Code | Run Inspection by Name...Inspect Code

于 2015-11-27T10:31:57.333 に答える
1

静的コード分析は、いくつかの潜在的なエラーを示唆する場合があります。エラーがないことを保証するものではなく、それに頼るべきではありません。

実用的なアドバイスとして、次のような方法ですべての静的呼び出しを検索できます

grep -roh "\w\+::.\+\?("

リストを自分で分析します。

于 2015-11-27T10:22:24.013 に答える
0

php.ini ファイルでエラー報告を変更する

error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED

于 2016-01-07T11:09:37.703 に答える