【问题标题】:PhpStorm - How to detect PHP error "Non-static method should not be called statically"?PhpStorm - 如何检测 PHP 错误“不应静态调用非静态方法”?
【发布时间】:2015-11-27 10:02:49
【问题描述】:

在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 代码检查配置:

谢谢!

【问题讨论】:

  • 工作正常:postimg.org/image/y82q2zzuj 1) 在此文件上尝试Code | Inspect Code...; 2) 甚至File | Invalidate Caches... 并重新启动IDE。
  • 仅运行此检查 -- 使用Code | Run Inspection by Name...(对每个文件执行完整的Inspect Code 更快)。
  • 我认为 Invalidate Caches 和 PhpStorm 的完全重启可以解决问题。检查这个特定错误似乎有问题,我不明白为什么(其他 PHP 错误/警告完全可以)。 @LazyOne:无论如何,谢谢! s28.postimg.org/gr2aoquyl/phpstorm_php_inspection_3.png

标签: php phpstorm code-inspection phpmd phpcodesniffer


【解决方案1】:

该检查在这里运行良好 (proof)。

  1. 请在这个文件上尝试Code | Inspect Code...——它会强制从头开始重新分析这个文件。有更好的吗?

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


附言
如果您有兴趣仅对整个项目运行此检查 -- 使用 Code | Run Inspection by Name... -- 对每个文件执行完整的 Inspect Code 会快得多。

【讨论】:

  • 我认为 Invalidate Caches 和 PhpStorm 的完全重启可以解决问题。检查这个特定错误似乎有问题,我不明白为什么(其他 PHP 错误/警告完全可以)。 @LazyOne:无论如何,谢谢! s28.postimg.org/gr2aoquyl/phpstorm_php_inspection_3.png
【解决方案2】:

静态代码分析可能会提示一些潜在的错误。它从不保证没有错误,人们真的不应该依赖它。

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

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

并自己分析列表。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-12-02
      • 2014-09-08
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2015-01-13
      相关资源
      最近更新 更多