首页 文章

PhpStorm - 如何检测PHP错误“不应静态调用非静态方法”?

提问于
浏览
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错误(这是逻辑):
enter image description here

我目前正在开发一个大型PHP应用程序,在某些PHP文件中静态调用非静态方法 . 这是一个非常老的PHP版本的问题,但我们决定迁移到最新的PHP版本 .

手动检查所有项目文件,以确定这个错误的语法将太长(1000个文件)!

The built-in code inspection features of PhpStorm doesn't detect this type of error within the analyzed source code. Why? Should I configure something? How?

下面,我在PhpStorm中的PHP代码检查配置:

enter image description here

谢谢!

3 回答

  • 1

    那里的检查工作正常(proof) .

    • 请在此文件上尝试 Code | Inspect Code... - 它将强制从头开始重新分析此文件 . 好点?

    • 如果没有 - 请执行 File | Invalidate Caches... 并重新启动IDE


    附:
    如果您对 running this inspection only on whole project 感兴趣 - 请使用 Code | Run Inspection by Name... - 为每个文件执行完整 Inspect Code 要快得多 .

  • 0

    静态代码分析可能会暗示一些潜在的错误 . 它永远不会保证没有错误,真的不应该依赖它 .

    作为一个实用的建议,您可以搜索所有静态调用

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

    并自己分析清单 .

  • 5

    更改php.ini文件中的错误报告

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

相关问题