简体   繁体   中英

PhpStorm - How to detect PHP error “Non-static method should not be called statically”?

With PHP, static method can be used in both static method and non-static method, and non-static method can only used in non-static method. That's why calling a dynamic method statically generates the E_STRICT error.

For example:

<?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();

The last line will generated this PHP error (it's logic): 在此输入图像描述

I am currently working on a large PHP application that calls, in some PHP files, non-static methods statically. It was not a problem with an very old version of PHP but we have decided to migrate to the latest PHP version.

Manually check all the project files to identify this bad syntax will be too long (+ 1000 files)!

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?

Below, my PHP code inspection configuration in PhpStorm:

在此输入图像描述

Thanks!

That inspection works fine here ( proof ).

  1. Please try Code | Inspect Code... Code | Inspect Code... on this file -- it will force re-analysing of this file from scratch. Any better?

  2. If nothing -- please do File | Invalidate Caches... File | Invalidate Caches... and restart IDE


PS
If you are interested of running this inspection only on whole project -- use Code | Run Inspection by Name... Code | Run Inspection by Name... -- it's much faster that doing full Inspect Code for each file.

Static code analysis may hint some potential errors. It never guarantees there are no errors, and one really shouldn't rely on it.

As a practical advice, you can search for all static calls with something like

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

and analyse the list yourself.

Change the error reporting in your php.ini file

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM