PhpStorm - 如何检测 PHP 错误 "Non-static method should not be called statically"?
PhpStorm - How to detect PHP error "Non-static method should not be called statically"?
和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 代码检查配置:
谢谢!
静态代码分析可能会提示一些潜在的错误。它从不保证没有错误,人们真的不应该依赖它。
作为实用建议,您可以使用类似
的方式搜索所有静态调用
grep -roh "\w\+::.\+\?("
然后自己分析列表。
这里的检查工作正常 (proof)。
请对这个文件尝试 Code | Inspect Code...
-- 它会强制从头开始重新分析这个文件。好点了吗?
如果没有 - 请执行 File | Invalidate Caches...
并重新启动 IDE
P.S.
如果您对 运行 此检查仅对整个项目感兴趣 -- 使用 Code | Run Inspection by Name...
-- 对每个文件进行完整 Inspect Code
要快得多.
更改 php.ini 文件中的错误报告
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED
和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 代码检查配置:
谢谢!
静态代码分析可能会提示一些潜在的错误。它从不保证没有错误,人们真的不应该依赖它。
作为实用建议,您可以使用类似
的方式搜索所有静态调用grep -roh "\w\+::.\+\?("
然后自己分析列表。
这里的检查工作正常 (proof)。
请对这个文件尝试
Code | Inspect Code...
-- 它会强制从头开始重新分析这个文件。好点了吗?如果没有 - 请执行
File | Invalidate Caches...
并重新启动 IDE
P.S.
如果您对 运行 此检查仅对整个项目感兴趣 -- 使用 Code | Run Inspection by Name...
-- 对每个文件进行完整 Inspect Code
要快得多.
更改 php.ini 文件中的错误报告
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED