PhpStorm 2021.3 Help

PHP 中的代码检查

本主题列出 了 PHP 中可用的所有 PhpStorm代码检查。

您可以在编辑器 |上切换特定检查或更改其严重性级别。IDE 设置的检查Ctrl+Alt+S页面。

控制流

检查

描述

默认严重性

'foreach' 变量覆盖已定义的变量

报告循环中在foreach循环之前分配了非原始值并在foreach循环之后访问的键和值。这种用法可能会不情愿地覆盖已经定义的值并导致潜在的错误。

弱警告 弱警告

'if' 与公共部分

报告if具有重复公共部分的语句。

弱警告 弱警告

'never' 类型的函数返回一个值

报告具有never可能返回某些值的返回类型提示的函数。具有这种返回类型的函数不应返回任何值。

有关详细信息,请参阅noreturn 类型 (php.net)

错误 错误

“开关”与公共部分

报告具有重复公共部分的“切换”语句。

弱警告 弱警告

不使用数组写访问

报告之后代码中未使用的数组写访问表达式。此类问题的最常见来源是修改通过参数传递的数组:如果数组是按值传递的,则更改将在函数之外不可见。

弱警告 弱警告

条件始终评估为“真/假”

报告已被早期条件覆盖并因此无效的条件以及在达到时始终为真(或始终为假)的变量。

弱警告 弱警告

由后续条件检查的逻辑表达式内的条件

报告逻辑二进制表达式中的条件,这些条件被后续条件覆盖,因此是多余的。

弱警告 弱警告

表达式始终为“空”

return报告始终为 的语句中的变量null

弱警告 弱警告

循环不迭代

报告其主体最多执行一次的循环语句。

检查不报告foreach循环体内使用的键或值的循环。通常,此类循环旨在仅在其第一次迭代时执行操作(例如,获取数组的第一个元素)。

弱警告 弱警告

“instanceof”的结果始终为“真”

报告instanceof其参数在检查变量的层次结构内的表达式。这样的表达式将始终计算为true

弱警告 弱警告

类型化的属性可能未初始化

报告从未初始化的类型化属性中读取的尝试。这样的尝试将导致TypeError.

类型化的属性应该通过以下任何一种方式进行初始化:
  • 按默认值

  • 在构造函数中

  • __get()魔法吸气剂

  • 就地,在使用的那一刻

有关详细信息,请参阅未初始化和未设置属性 (php.net)

警告 警告

不必要的“其他”分支

报告其主体始终执行终止语句(例如或)的语句中的else分支。这样的分支是多余的,可以安全地省略。ifreturnthrow

信息没有高亮,只有修复

无法访问的语句

报告无法到达的语句。

警告 警告

对没有“未设置”的引用数组值的写访问

报告仍然引用先前在foreach语句中使用的数组值的变量的写访问表达式。

建议使用 销毁此类引用unset

有关详细信息,请参阅foreach (php.net)unset (php.net)

警告 警告

作曲家

检查

描述

默认严重性

composer.json 中的重复包条目

报告composer.jsonrequire的和require-dev部分中的重复包条目。

弱警告 弱警告

composer.json 中缺少扩展名

报告composer.json中未指定的 PHP 扩展中的类、函数和常量的使用情况。如果在composer.jsonrequire-dev的部分中列出了扩展,则检查会报告位于标记为测试根的文件夹之外的相应符号的用法。

警告 警告

未安装的 Composer 包

报告composer.json中需要但未安装的 Composer 包。

弱警告 弱警告

质量工具检查被禁用

突出显示composer.json中质量工具的条目,以防相应的代码检查被禁用。

弱警告 弱警告

未解决的文件引用

报告 composer.json 中未解析的文件引用。

警告 警告

可替换作业

检查

描述

默认严重性

赋值可以用增量或减量代替

报告可以用递增 ( ++) 或递减 ( --) 操作替换的分配。

信息没有高亮,只有修复

赋值可以替换为操作符赋值

报告可以用组合运算符分配替换的分配(例如,+=)。

信息没有高亮,只有修复

诗篇

检查

描述

默认严重性

函数调用与“可调用”声明不兼容

报告函数调用中的参数,其类型与通过定义的参数不兼容Closure

警告 警告

PHPUnit

检查

描述

默认严重性

'assertTrue()' 参数类型不兼容

assertTrue()报告参数类型不兼容的 PHPUnit调用。由于该assertTrue()方法依赖于与 的严格类型比较true,因此此类断言将始终失败。

警告 警告

断言可以替换为“assertEmpty/assertNotEmpty”

报告PHPUnit 测试中可以用/替换的assertTrue/用法。assertFalseassertEmptyassertNotEmpty

有关详细信息,请参阅assertEmpty (phpunit.readthedocs.io)

弱警告 弱警告

断言可以替换为“失败”

在 PHPUnit 测试中使用/参数报告assertTrue()/assertFalse()调用。这种用法可以用调用来代替,以指示测试预计会失败。falsetruefail()

弱警告 弱警告

提供的覆盖函数参考不带'::'

@covers报告对PHPDoc 标记中未使用范围解析运算符 ( ::)的函数/方法的引用。

弱警告 弱警告

不推荐使用“assertContains/assertNotContains”

使用字符串和参数报告不推荐使用assertContainsand函数。assertNotContains$needle$ignoreCase

和函数的字符串$needle和可选布尔$ignoreCase参数已弃用,将在 PHPUnit 9 中删除。assertContainsassertNotContains

有关详细信息,请参阅assertEquals 函数 (phpunit.readthedocs.io)的用法。

弱警告 弱警告

不推荐使用 'assertEquals/assertNotEquals' 用法

使用、、和参数报告assertEqualsassertNotEquals函数的不推荐用法。$delta$maxDepth$canonicalize$ignoreCase

和函数的可选$delta、、、和参数已弃用$maxDepth,将在 PHPUnit 9 中删除。$canonicalize$ignoreCaseassertEqualsassertNotEquals

有关详细信息,请参阅assertEquals 函数 (phpunit.readthedocs.io)的用法。

弱警告 弱警告

不推荐使用“assertFileEquals/assertStringEqualsFile”

使用和参数报告assertFileEqualsassertFileNotEqualsassertStringEqualsFileassertStringNotEqualsFile函数的弃用用法。$canonicalize$ignoreCase

和函数的可选参数$canonicalize$ignoreCase参数已被弃用,将在 PHPUnit 9 中删除。assertFileEqualsassertFileNotEquals

有关详细信息,请参阅assertFileEquals 函数的用法 (phpunit.readthedocs.io)assertFileEquals 函数的用法 (phpunit.readthedocs.io)

弱警告 弱警告

通过访问修饰符注释弃用 @covers/@uses

报告正在使用的@covers@usesPHPUnit 文档标签ClassName::<*>。PHPUnit 10 及更高版本将不支持此类注释。

弱警告 弱警告

通过 doc 标签弃用的异常处理

报告以下已弃用的 PHPUnit 文档标签的使用情况:

  • @expectedException

  • @expectedExceptionMessage

  • @expectedExceptionCode

  • @expectedExceptionMessageRegExp

弱警告 弱警告

弃用的 expectException 用法

报告已弃用的expectException().

支持使用expectException()带有\PHPUnit\Framework\Error\Deprecated\PHPUnit\Framework\Error\Error\PHPUnit\Framework\Error\Notice和的方法\PHPUnit\Framework\Error\Warning已被弃用,并将在 PHPUnit 10 中删除。

相反,应该使用expectDeprecation()expectError()expectNotice()和方法。expectWarning()

有关详细信息,请参阅测试 PHP 错误、警告和通知 (phpunit.readthedocs.io)

弱警告 弱警告

可以使用方法 'assertArrayHasKey/assertArrayNotHasKey'

报告作为参数随调用一起提供的assertTrue()和方法调用。此类调用可以替换为对专用方法的调用。assertNotTrue()array_key_exists()assertArrayHasKey()

有关详细信息,请参阅assertArrayHasKey (phpunit.readthedocs.io)

弱警告 弱警告

PHPUnit 10 中不推荐使用方法

报告对 PHPUnit 10 中删除的 PHPUnit 断言方法的调用。

警告 警告

错误的 PHPUnit 相等断言方法参数

报告对 PHPUnit 相等断言方法(例如assertEquals()assertNotEquals()assertSame()等)的调用,这些方法将非文字作为预期结果参数,将文字作为实际结果参数。这样的调用对于通过的断言会表现良好,但如果它们的预期参数和实际参数不同,则可能会产生令人困惑的错误报告。

有关详细信息,请参见assertEquals

弱警告 弱警告

PHPUnit 测试缺少目标元素

报告未找到相应生产类或方法的测试类和方法。

信息没有高亮,只有修复

未定义的 PHPUnit 数据提供者

@dataProvider报告对PHPDoc 标记中未解析的函数/方法的引用。

请注意,在解析 时dataProvider,PHPUnit 不考虑use语句。

警告 警告

使用 'assertCount/assertSameSize' 方法而不是 assertEquals

报告函数作为参数的assertEqualsassertNotEquals方法的替代用法count

有关详细信息,请参阅assertCount的用法。

有关详细信息,请参阅assertSameSize的用法。

弱警告 弱警告

PSR-12

检查

描述

默认严重性

复合命名空间深度大于 2

报告深度超过两个级别的复合命名空间的使用情况。

根据 PSR-12,不得使用深度超过 2 的复合命名空间。

有关详细信息,请参阅PSR-12:扩展编码样式 (php-fig.org)

已禁用

否则,如果

else if报告用两个词指定的结构的用法。

根据 PSR-12,elseif应该使用关键字,而不是else if让所有控制关键字看起来像单个单词。

有关详细信息,请参阅PSR-12:扩展编码样式 (php-fig.org)

已禁用

缺少参数列表

报告类实例中缺少的参数列表。

根据 PSR-12 规范,当实例化一个新类时,即使没有传递给构造函数的参数,括号也必须始终存在。

有关详细信息,请参阅PSR-12:扩展编码样式 (php-fig.org)

已禁用

缺少可见性

报告在没有可见性定义的情况下声明的属性、常量和方法。

根据 PSR-12,可见性必须定义在:
  • 所有属性,

  • 如果您的项目的 PHP 最低版本支持常量可见性(PHP 7.1 或更高版本),则为所有常量,

  • 所有方法。

有关详细信息,请参阅PSR-12:扩展编码样式 (php-fig.org)

已禁用

每行一个特征使用

报告通过单个use语句导入的几个特征的情况。

根据 PSR-12,导入到类中的每个单独的特征必须每行包含一个,并且每个包含必须有自己的use导入语句。

有关详细信息,请参阅PSR-12:扩展编码样式 (php-fig.org)

已禁用

修饰符的顺序

报告以错误顺序指定的可见性修饰符。

根据 PSR-12,正确的顺序如下:
  • 如果存在,abstractandfinal声明必须在可见性声明之前。

  • 如果存在,static声明必须在可见性声明之后。

有关详细信息,请参阅PSR-12:扩展编码样式 (php-fig.org)

已禁用

类型关键字的缩写形式

报告长格式关键字的使用情况。

根据 PSR-12,必须使用类型关键字的简写形式,即bool代替booleanint代替integer,等等。

有关详细信息,请参阅关键字和类型 (php-fig.org)

已禁用

var的用法

var报告用于声明类属性的关键字的用法。

根据 PSR-12,var关键字不得用于声明属性。

有关详细信息,请参阅PSR-12:扩展编码样式 (php-fig.org)

已禁用

属性

检查

描述

默认严重性

'#[ArrayShape]' 属性可以添加

报告返回具有已知重要键的数组的方法和函数。#[ArrayShape]建议通过属性指定返回数组的形状。

弱警告 弱警告

'#[Pure]' 属性可以添加

报告非平凡纯函数。此类函数在其主体中有其他函数调用,但所有此类调用都不会产生任何副作用。

弱警告 弱警告

数组键与数组形状不匹配

#[ArrayShape]报告与通过属性指定的键不匹配的数组键。

弱警告 弱警告

属性可以添加到覆盖成员

报告可以传播到覆盖方法/参数的方法和参数的属性。

有关详细信息,请参阅属性 (php.net)

弱警告 弱警告

类不能用作属性

报告解析为未使用 注释的类的属性#[Attribute]

有关详细信息,请参阅属性 (php.net)

弱警告 弱警告

注释在 PHP 8.0 中被解析为属性

以 .开头的报告行注释#[。在 PHP 8.0 及更高版本中,此类注释被解析为属性。

有关详细信息,请参阅属性 (php.net)

警告 警告

应使用预期值

报告赋值和比较表达式中应替换为预期值之一的值(即,通过#[ExpectedValues]属性指定的值)。

有关详细信息,请参阅属性 (php.net)

弱警告 弱警告

在无效范围内写入的不可变属性

突出显示对属性的写访问引用,通过声明的写访问范围#[Immutable]比引用范围更严格。

错误 错误

可以添加 NoReturn 属性

没有它的报告函数#[NoReturn]总是通过调用其他 exitPoint 函数属性来停止执行。

弱警告 弱警告

不适用的属性目标声明

Attribute::TARGET_*报告在其参数声明中没有适当标志的属性。

有关详细信息,请参阅属性 (php.net)

弱警告 弱警告

不可重复属性

Attribute::IS_REPEATABLE报告参数声明中没有标志的重复属性。

有关详细信息,请参阅属性 (php.net)

弱警告 弱警告

纯函数可能会产生副作用

报告在#[Pure]可能产生副作用的函数上使用的注释。

弱警告 弱警告

属性中的冗余括号

报告属性中的空参数列表。

有关详细信息,请参阅属性 (php.net)

弱警告 弱警告

代码气味

检查

描述

默认严重性

'__toString' 可能会抛出异常

报告它的用法__toString可能会引发异常,这对于低于 7.4 的 PHP 语言级别是不允许的。

警告 警告

'array_push()' 与单个元素

报告array_push()用于将单个元素添加到数组的调用。在这种情况下,建议改为使用$array[] =,这样不会增加调用函数的开销。

有关详细信息,请参阅array_push (php.net)

弱警告 弱警告

'array_search()' 可以替换为 'in_array()' 调用

报告array_search()仅用于检查数组中是否存在元素的调用,即表达式,如if (array_search($a, $b) === false) {}. 这样的调用可以安全地替换为in_array()调用。

弱警告 弱警告

'continue' 是针对 'switch' 语句

报告作为continue目标语句的switch语句。在 PHP 7.3 及更高版本中,此类用法已被弃用,并且会发出E_WARNING,因为它们很可能是编程错误的结果。

  • 在 PHP 中,此类continue语句等价于break,即它们结束当前switch结构的执行。

  • 在其他语言中,此类continue语句的行为与continue 2PHP 中的一样,也就是说,它们将执行带到更高级别的控制结构(例如,外循环的下一次迭代)。

有关详细信息,请参阅continue (php.net)break (php.net)switch (php.net)

弱警告 弱警告

'func_get_arg()' 调用可以替换为参数访问

报告func_get_arg()可以用直接参数访问替换的调用。

弱警告 弱警告

'if' 可以与后续条件合并

报告if后面的语句或具有相同主体的elseif其他语句。if这样的语句可以合并在一起。

信息没有高亮,只有修复

'in_array' 可以替换为比较

报告in_array()以单元素数组作为$haystack参数提供的调用。这样的调用可以用直接比较来代替。

有关详细信息,请参见in_array (php.net)

弱警告 弱警告

“匹配”表达式只有默认臂,应简化

报告match仅包含default手臂的表达式。这样的表达是多余的,应该简化。

有关详细信息,请参阅匹配表达式 (php.net)

弱警告 弱警告

'preg_match' 可以替换为 'str_contains'

使用不使用任何正则表达式工具的参数报告preg_match()调用。pattern这样的调用可以替换为str_starts_with()orstr_contains()调用。

弱警告 弱警告

'switch' 与单个 'case'

报告switch仅包含单个语句的case语句。这样switch的语句可以转换成if语句。

弱警告 弱警告

访问静态特征成员

报告用于特征的静态成员访问表达式。从 PHP 8.1 开始不推荐使用这种直接访问。相反,应该在使用 trait 的类上访问静态成员。

有关详细信息,请参阅PHP 8.1 的弃用:访问特征上的静态成员 (php.net)

弱警告 弱警告

'instanceof' 的参数应该只是对象或字符串

报告不是对象或字符串的“instanceof”参数

警告 警告

数组访问可以替换为“foreach”值

foreach报告循环内可以替换为foreach值的数组访问表达式。

弱警告 弱警告

数组内部指针重置是不必要的

报告对reset($array)内部指针已在第一个元素上设置的数组的调用。这样的调用是多余的,可以安全地删除。

有关详细信息,请参阅重置 (php.net)

弱警告 弱警告

数组在访问点始终为空

报告在访问点已知为空的迭代/访问的数组。

弱警告 弱警告

数组到字符串的转换

报告数组到字符串的转换,即在预期字符串的上下文中提供的数组。

在 PHP 8.0 之前,这会导致E_NOTICE级别错误。在 PHP 8.0 中,E-WARNING发出 an 。

警告 警告

仅用于写访问的数组

报告仅更新但从未查询的本地数组。

弱警告 弱警告

布尔表达式可以简化

报告包含trueorfalse文字并且可以简化的布尔表达式。

弱警告 弱警告

通过子类引用的类常量

报告以被引用类的父类中的常量为目标的类常量引用。

弱警告 弱警告

连接到空字符串可以与赋值合并

报告.=在分配给空字符串文字后立即执行的串联分配。这样的分配可以合并在一起。

弱警告 弱警告

条件可以替换为 'min()'/'max()' 调用

报告执行手动最小/最大计算而不是调用min/max函数的条件。

弱警告 弱警告

使用前导斜杠定义的常量名称

报告define常量的 FQN 以斜杠开头的构造。PHP 不会正确注册此类常量。

警告 警告

'catch' 语句中的重复分支

报告catch具有重复正文的语句。

弱警告 弱警告

异常立即重新抛出

报告catch仅重新抛出捕获的异常的语句,该异常位于与后续异常类型不同的类层次结构中。

弱警告 弱警告

Foreach 使用单个元素的数组文字

报告foreach迭代包含单个元素的数组文字的语句。

弱警告 弱警告

使用单个参数格式化函数调用

使用单个参数报告sprintf()and调用。vsprintf()这样的调用不会产生任何效果,并且可以安全地展开,即用参数本身替换。

弱警告 弱警告

二进制表达式中的幂等运算

报告不改变表达式结果的二进制表达式操作数(例如+ 0or . ""),因此是多余的。

弱警告 弱警告

返回点不一致

报告函数/方法退出点的不一致。

报告了以下类型的不一致:
  • 函数/方法包含return带参数和不带参数的语句。

  • 函数/方法可以返回一个值或以其他方式结束其执行而不返回任何内容。

从技术上讲,这些不是错误,但实际上它们通常表示编程错误。

警告 警告

逻辑表达式具有相同的操作数

报告使用相同操作数但应该使用不同操作数的表达式(例如,$var == $var)。这些包括比较、逻辑、空合并、减法和除法表达式。

弱警告 弱警告

循环可以替换为 'implode()'

报告foreach可以安全地替换为implode()调用的循环。

有关详细信息,请参阅implode (php.net)

弱警告 弱警告

循环可以替换为“str_repeat”

报告for可以安全地替换为str_repeat()调用的循环。

弱警告 弱警告

不应覆盖方法可见性

检查方法是否不会覆盖可见性。

用子类中的方法覆盖protected方法public使该方法可以从任何地方访问。这违反了封装原则,被认为是不好的做法。

有关详细信息,请参阅方法可见性 (php.net)

已禁用

从不使用方法的返回值

报告返回未使用值的私有方法。

弱警告 弱警告

以“1”作为操作数的模运算

%报告总是计算为0or的模表达式1

弱警告 弱警告

嵌套的 'dirname()' 调用可以替换为 'levels' 参数用法

dirname()报告可以通过使用levels参数省略的嵌套调用。

弱警告 弱警告

嵌套的“最小/最大”调用

报告嵌套min/max调用。由于min/max函数接受任意数量的参数,因此此类嵌套调用是多余的。

弱警告 弱警告

参数的值始终相同

报告在所有方法调用中具有相同值的私有方法中的参数。

弱警告 弱警告

参数编号不匹配声明

报告接受的参数多于其声明中指定的参数的函数/方法调用。

弱警告 弱警告

私有财产可以是本地的

报告仅在单个方法中使用的私有属性。这些属性可以用局部变量替换。

弱警告 弱警告

属性使用具有相同的访问权限

报告以下私有属性:

  • 写但从未读过

  • 读过但从未写过

警告 警告

对“foreach”中迭代的值的冗余“array_values”调用

报告在没有键的情况下使用迭代值的循环array_values()内的调用。foreach这样的调用是多余的,可以安全地删除。

弱警告 弱警告

多余的“继续/中断”参数

报告and语句的冗余1参数。由于此参数是可选的并且其默认值为,因此可以省略此类用法。continuebreak1

有关详细信息,请参阅继续 (php.net)中断 (php.net)

弱警告 弱警告

最终类中的冗余“静态”

报告static最终类中的使用情况

弱警告 弱警告

对促销资产的冗余分配

报告对类属性的冗余分配,这些属性重复通过提升的构造函数参数执行的自动分配。

有关详细信息,请参阅Constructor Property Promotion (php.net)

弱警告 弱警告

冗余转换为布尔值

报告(bool)/(boolean)转换和boolval()调用是多余的,因为bool隐式执行转换。

弱警告 弱警告

冗余转换为字符串

由于隐式执行转换为字符串,因此报告冗余的(string)转换和strval()调用。

弱警告 弱警告

冗余方法覆盖

报告仅包含对父方法的一次调用的覆盖方法。

弱警告 弱警告

冗余可选参数

报告与可选参数的相应默认值匹配的冗余参数。

弱警告 弱警告

三元表达式可以用条件替换

报告指定的三元表达式condition ? true : false可以安全地替换为 just condition

弱警告 弱警告

三元表达式可以替换为短版本

报告条件和语句匹配的?:三元表达式。true

弱警告 弱警告

函数声明中的参数过多

报告参数数量超过指定限制的函数/方法声明。

已禁用

不必要的“返回/继续”声明

报告不必要的returncontinue可以安全删除的陈述。

弱警告 弱警告

不必要的局部变量

在赋值后立即报告在 exit 语句中使用的局部变量,例如throwreturnyield

弱警告 弱警告

不必要的传递引用

报告通过引用传递给函数/方法但未在函数/方法主体中修改的变量。在这种情况下,&可以安全地删除 in 参数的声明。

有关详细信息,请参阅按引用传递 (php.net)

弱警告 弱警告

不必要的分号

报告不必要的分号。

弱警告 弱警告

函数调用参数的不必要的扩展运算符

...报告可以安全展开的函数调用参数中数组文字的扩展运算符 ( ) 的使用。

弱警告 弱警告

静音运算符的使用

@报告非常不鼓励使用的静音运算符 ( ) 的用法。

有关详细信息,请参阅错误控制运算符 (php.net)

已禁用

无用的尾随逗号

报告参数列表和闭包use列表中不带来任何好处的尾随逗号。

  • 在单行列表中,结尾的逗号是多余的,可以删除。

  • 在多行列表中,如果尾随逗号后没有提供换行符,则无法轻松添加、删除或移动行。

弱警告 弱警告

PHP 严格标准

检查

描述

默认严重性

重写方法的声明应与父类兼容

报告与父类不兼容的重写方法声明。仅对低于 8.0 的 PHP 语言级别启用检查。

警告 警告

静态函数不应该是抽象的

报告声明为抽象的静态方法。

警告 警告

代码风格

检查

描述

默认严重性

'Closure::fromCallable()' 可以转换为一流的可调用语法

报告callable使用但可以替换为自 PHP 8.1 以来可用Closure::fromCallable的一流可调用语法的创建表达式。f(...)

有关详细信息,请参阅一流的可调用语法 (php.net)

弱警告 弱警告

'array_fill' 可以转换为循环

报告array_fill()可以用foreach循环替换的调用。

信息没有高亮,只有修复

'array_filter()' 调用可以转换为循环

报告array_filter()可以用foreach循环替换的调用。

信息没有高亮,只有修复

'array_map()' 调用可以转换为循环

报告array_map()可以用foreach循环替换的调用。

信息没有高亮,只有修复

'get_class()' 调用可以替换为 '::class'

报告调用并建议在 PHP 语言级别设置为 8.0 或更高版本时get_class()替换它们。::class

有关详细信息,请参阅允许对象上的 ::class (php.net)

信息没有高亮,只有修复

'isset' 可以替换为 coalesce

报告使用isset可以安全地替换为使用??空合并运算符的表达式的条件。

有关详细信息,请参阅空合并运算符 (php.net)

弱警告 弱警告

'match' 可以替换为 'switch' 语句

报告match可以用switch语句替换的表达式。

请注意,match表达式使用严格的类型比较,而switch语句依赖于松散的比较。因此,表达式语义可能在替换后发生变化。

有关详细信息,请参阅匹配 (php.net)切换 (php.net)

信息没有高亮,只有修复

'match' 表达式可以替换为三元表达式

报告match包含默认臂和单个非默认臂的表达式。这样match的表达式可以用三元表达式代替。

有关详细信息,请参阅匹配表达式 (php.net)

信息没有高亮,只有修复

“混合”返回类型可以缩小

报告可以缩小到更具体类型的“混合”返回类型。

弱警告 弱警告

'mixed' 类型可以替换为 'array'

报告mixed[]PHPDoc 块中可以安全替换为array.

弱警告 弱警告

'str*()' 调用可以替换为 PHP 8 'str_*()' 调用

报告可以用函数调用替换的和strpos函数调用(在 PHP 8.0 中引入)。substrstr_*

有关详细信息,请参见str_contains (php.net)str_starts_with 和 str_ends_with 函数 (php.net)

弱警告 弱警告

'switch' 可以替换为 'match' 表达式

报告可以用 'match' 表达式替换的 'switch' 语句

弱警告 弱警告

不推荐将“false”自动转换为数组

报告false值到数组的自动转换。从 PHP 8.1 开始不推荐使用此类表达式。

有关详细信息,请参阅在 false 上弃用 autovivification

弱警告 弱警告

方法调用或类使用中的大小写不匹配

报告与其声明中使用的大小写不匹配的函数、方法、类和命名空间的使用情况。

已禁用

类路径与项目结构不匹配

报告文件路径不遵循 PSR-0/PSR-4 项目结构的类。

您可以在 Settings/Preferences | 下配置项目供应商根目录。目录。

有关详细信息,请参阅PSR-0/PSR-4 标准 (php-fig.org)

警告 警告

闭包可以转换为箭头函数

报告可以转换为短箭头函数的匿名函数。自 PHP 7.4 起支持短箭头函数。

有关详细信息,请参阅PHP RFC:箭头函数 2.0 (php.net)

信息没有高亮,只有修复

可以用命名参数替换注释

报告函数调用中的参数之前的内联注释,这些注释仅包含参数的名称,因此用作提示。在 PHP 8.0 及更高版本中,可以改用命名参数。

有关详细信息,请参阅命名参数 (php.net)

弱警告 弱警告

不带大括号的控制语句体

报告其主体未用大括号括起来的控制结构(例如循环或条件)。

有关详细信息,请参阅控制结构 (php.net)

信息没有高亮,只有修复

危险的数组初始化

报告危险的数组初始化(例如$arr[] = value)。

不鼓励这种做法,因为如果$arr已经包含一些值(例如,来自请求变量的字符串),那么该值将保留在原处,[]并且实际上可能代表字符串访问运算符。最好通过直接赋值来初始化变量。

有关详细信息,请参阅使用方括号语法 (php.net) 创建/修改

信息没有高亮,只有修复

定义常量名可以替换为 'const' 语法

报告define()可以用const语法替换的调用。

弱警告 弱警告

强制 PHPDoc 注释

报告没有 PHPDoc 注释或仅包含@noinspection标记的 PHPDoc 注释的元素。

您可以使用Missing PHPDoc Comment检查来仅报告非完全类型化的元素。

已禁用

不加括号的表达式

报告潜在的模棱两可的表达,并建议将它们括在澄清括号中。

信息没有高亮,只有修复

完全限定名称使用

报告可以通过添加use语句缩短的完全限定类名。

弱警告 弱警告

隐式八进制文字可以用显式替换

报告071可以用 0o71 等显式替换的隐式八进制文字。

0o/0OPHP 8.1 及更高版本支持使用前缀的显式八进制文字。

有关详细信息,请参阅显式八进制整数文字表示法 (php.net)

信息没有高亮,只有修复

循环可以转换为 'array_fill()' 调用

报告for可以用array_fill()调用替换的循环。

信息没有高亮,只有修复

循环可以转换为 'array_filter()' 调用

报告foreach可以用array_filter()调用替换的循环。

信息没有高亮,只有修复

循环可以转换为 'array_map()' 调用

报告foreach可以用array_map()调用替换的循环。

信息没有高亮,只有修复

方法可以设为“静态”

报告不使用任何实例引用的方法,因此可以转换为静态方法。

信息没有高亮,只有修复

缺少@throws 标签

检查 PHPDoc 块是否包含@throws函数/方法抛出的每个异常的标记。

添加到设置/首选项下的未检查异常列表中的异常类 | PHP | 分析排除在检查范围之外。

弱警告 弱警告

缺少 PHPDoc 注释

报告不带 PHPDoc 注释或只包含@noinspection标记的 PHPDoc 注释的非完全类型化元素。

您可以使用Enforce PHPDoc Comment检查来报告完全类型化的元素。

已禁用

一个文件中的多个类声明

在单个文件中报告多个类声明,这违反了 PSR-0/PSR-4 标准。

有关详细信息,请参阅PSR-0/PSR-4 标准 (php-fig.org)

弱警告 弱警告

命名参数顺序与参数顺序不匹配

报告具有与参数顺序不匹配的顺序的命名参数

弱警告 弱警告

元素的非规范顺序

报告具有以非规范顺序列出的元素的 PHPDoc 标记。

例如,对于诸如 、 或 之类的标签@property@param检查@var将报告使用[name] ["Type"]代替["Type"] [name]

已禁用

可以使用 Nullsafe 运算符 '?->'

报告可以安全地替换为?->nullsafe 运算符的 null 检查条件表达式。

弱警告 弱警告

旧式构造函数

报告旧式构造函数声明 ( ClassName()) 并建议用新式构造函数 ( __construct()) 替换它们。

在 PHP 8.0 之前,全局命名空间中的类中使用的旧式构造函数语法被视为已弃用,并会导致E_DEPRECATED错误。如果同时定义了 a__construct()ClassName()方法,__construct()将被调用。

在命名空间类或 PHP 8.0 之后的任何类中,ClassName()方法永远不会有任何特殊含义,也永远不会被称为构造函数。因此,如果 PHP 语言级别设置为 8.0 或更高版本,则检查不会报告此类情况。

有关详细信息,请参阅构造函数和析构函数 (php.net)

警告 警告

PHPDoc 注释签名不完整

报告至少包含一个@paramor@return标记但缺少一些@paramor标记的 PHPDoc 注释,@return用于在函数/方法声明中指定的参数或返回类型。

弱警告 弱警告

冗余结束标签

报告 PHP 结束标记?>的使用情况,这在仅包含 PHP 代码的文件中是多余的。

弱警告 弱警告

短开标签用法

报告简短的 PHP 开始标签<?使用情况。由于可以在 PHP 解释器配置中禁用短标签,因此使用它们可能会导致代码兼容性问题。

有关详细信息,请参阅PHP 标记 (php.net)

警告 警告

带大括号的单语句体

报告其主体用大括号括起来但仅包含单个子语句的控制结构(例如循环或条件)。在这种情况下使用大括号是不必要的。

有关详细信息,请参阅控制结构 (php.net)

信息没有高亮,只有修复

检测到传统语法数组字面量

报告数组文字中的传统数组语法 ( array()) 用法,并建议用短数组语法 ( []) 替换它们。

已禁用

不允许使用特征

报告解析为特征但在use语句外部指定的类引用。这种用法很可能是编程错误的结果,因为无法实例化特征,并且instanceof设计不支持特征的任何类似行为。

有关详细信息,请参阅特征 (php.net)

弱警告 弱警告

特征使用规则解析为具有不同包含类的方法

报告use从不同的包含类而不是在use声明中指定的类解析为方法的特征方法规则。

弱警告 弱警告

不需要类型转换

报告对已经属于相应类型的值使用的类型转换运算符。这样的操作员是多余的,可以安全地删除。

有关详细信息,请参阅类型杂耍 (php.net)

弱警告 弱警告

对标量值进行类型转换

报告可以就地评估的类型转换,并建议用实际计算值替换它们。

有关详细信息,请参阅类型杂耍 (php.net)

弱警告 弱警告

变量的不必要的花括号语法

报告不必要{}用于在字符串文字中插入变量。

有关详细信息,请参阅变量解析 (php.net)

弱警告 弱警告

不必要的双引号

报告不包含字符串插值、转义序列或单引号的双引号字符串文字。

已禁用

不必要的完全限定名称

报告完全限定类名的用法,可以在不添加use语句的情况下缩短。

弱警告 弱警告

'use' 语句中不必要的前导 '\'

报告use带有不必要前导的语句\

对于命名空间名称(包含命名空间分隔符的完全限定的命名空间名称,例如与不包含命名空间分隔符的Foo\Bar全局名称相反,例如FooBar当前命名空间。

有关详细信息,请参阅使用命名空间:别名/导入 (php.net)

弱警告 弱警告

不必要的括号

报告包含多余括号的表达式,可以安全地删除。

信息没有高亮,只有修复

变量变量的使用

报告变量变量的使用情况(动态变量名称,例如$$a)。

已禁用

可能的错误

检查

描述

默认严重性

条件分配

报告在条件表达式中使用的赋值。

信息没有高亮,只有修复

在枚举中找不到具有指定值的案例

报告from在目标枚举类中找不到的枚举方法调用的参数。

有关详细信息,请参阅枚举 (php.net)

错误 错误

使用算术连接

+报告与、-<<和运算符一起使用的字符串连接表达式>>。从 PHP 8 开始,连接操作的优先级较低,因此此类表达式可能会产生意想不到的结果。

有关详细信息,请参阅串联优​​先级 (php.net)

警告 警告

不断重新分配

报告常量的重新分配。

由于常量不能被改变,这样的赋值将没有任何效果,并且会发出一个E_NOTICE(在 PHP 7.4 和更早版本中)或E_WARNING(在 PHP 8.0 和更高版本中)。

警告 警告

被零除

报告除以零或模零。

错误 错误

“匹配”表达式中的重复手臂

match报告武器中的重复尸体。

有关详细信息,请参阅匹配表达式 (php.net)

弱警告 弱警告

重复的数组键

报告数组声明中的重复键。

如果数组声明中的多个元素使用相同的键,则仅使用最后一个,而所有其他元素将被覆盖。

警告 警告

switch 语句中的重复分支

报告switch不同分支中包含相同代码的语句。

弱警告 弱警告

switch 语句中的重复大小写

报告语句中的重复case表达式switch

如果一条switch语句包含多个重复case的表达式,则只执行第一个。

警告 警告

函数调用中的重复字符

报告在characters函数的参数中提供的重复字符,如ltrimor str_words_counts。这种重复很可能是一个错误,可以安全地删除。

警告 警告

重复条件

match报告表达式中的重复条件。

有关详细信息,请参阅匹配表达式 (php.net)

警告 警告

字符串不支持空索引运算符

报告空索引运算符 ( []) 对字符串的使用情况。

从 PHP 7.1 开始,对字符串应用空索引运算符会引发致命错误。

有关详细信息,请参阅使用方括号语法 (php.net) 创建/修改

错误 错误

未使用的表达式结果

报告计算的表达式,但计算结果不用于任何地方。

例如,可能由于将=运算符拼错为==.

警告 警告

Foreach 数组用作值

将循环中使用的变量报告foreach为数组表达式和数组的键或值(例如,foreach ($items as $items) {})。

通常,这是打字错误的结果。

警告 警告

格式函数参数不匹配

报告未映射到任何参数或规范转换的格式函数的参数(例如printf或)。sprintf

有关详细信息,请参阅printf (php.net)sprintf (php.net)

警告 警告

转到循环语句

报告goto位于循环或switch语句内的标签。

有关详细信息,请参阅goto (php.net)

错误 错误

无效的字符串偏移使用

报告将导致运行时错误的无效字符串偏移使用。

报告了以下用法:
  • 使用字符串偏移作为对象或数组

  • 通过取消设置字符串偏移量unset

  • 通过引用传递字符串偏移量

  • 创建对字符串偏移量的引用或从字符串偏移量创建引用

  • 增加或减少字符串偏移量

  • 使用组合运算符赋值,例如字符串偏移量+=.=

  • 使用空字符串或长度 >1 的字符串分配字符串偏移量

错误 错误

解包参数的类型无效

报告类型不是arraynor的解压函数参数和数组元素Traversable

从 PHP 8.0 开始,这种用法将导致Fatal error.

警告 警告

本地对象仅用于写入属性

将变量分配报告给仅用于写入对象属性而没有可观察到的副作用的新对象。

警告 警告

方法“__toString”实现

报告尝试将没有__toString方法实现的对象转换为string.

在 PHP 7.4 之前,这会导致致命E_RECOVERABLE_ERROR级别的错误。ERROR在 PHP 7.4 中,抛出了一个致命的不可恢复。在 PHP 8.0 中,返回值遵循标准的 PHP 类型语义,如果可能并且禁用严格类型,则将强制转换为字符串。

如果启用了 Check __toString exists for each expression type 选项,则检查将检查表达式的所有可能类型,并报告其中至少一个不包含__toString方法实现。

有关详细信息,请参阅__toString (php.net)

警告 警告

方法“__toString”返回类型

报告__toString不返回的方法string

在 PHP 7.4 之前,这会导致致命E_RECOVERABLE_ERROR级别的错误。ERROR在 PHP 7.4 中,抛出了一个致命的不可恢复。在 PHP 8.0 中,返回值遵循标准的 PHP 类型语义,如果可能并且禁用严格类型,则将强制转换为字符串。

有关详细信息,请参阅__toString (php.net)

错误 错误

缺少“中断”声明

报告不以 a或语句结尾case的语句中的子句。switchbreakreturn

如果一个case子句不以breakor结尾return,它的执行可能会无意中落入下一个案例。

弱警告 弱警告

缺少构造函数的父调用

报告不调用其父构造函数的构造函数。

警告 警告

缺少父母对魔术方法的要求

报告不调用其父魔术方法的魔术方法。

已禁用

缺少父调用方法

报告不调用其父方法的方法。

已禁用

嵌套与外部“foreach”变量冲突

foreach报告内部和外部循环都用作键或值的变量。在大多数情况下,这是一个错误,或者将来可能会导致错误。

警告 警告

非严格对象相等

报告比较运算符 ( ==) 用于比较对象变量的用法。

对象变量比较如下:
  • 使用比较运算符 ( ==) 时,如果两个对象实例具有相同的属性和值(值与 比较==)并且是同一类的实例,则认为它们相等。

  • 当使用恒等运算符 ( ===) 时,当且仅当对象变量引用同一类的同一实例时,它们才被认为是相同的。

有关详细信息,请参阅比较对象 (php.net)

弱警告 弱警告

在必需参数之前可选

报告出现在函数/方法声明中所需参数之前的可选参数。

有关详细信息,请参阅默认参数值 (php.net)

警告 警告

通过引用传递参数

报告无法通过引用传递的函数/方法调用中的参数。

只有从函数返回的变量和引用才能通过引用传递。有关详细信息,请参阅按引用传递 (php.net)

错误 错误

冗余分配

报告两边相等的赋值语句。此类分配没有效果,可以删除。

警告 警告

发现了一些枚举案例

报告未涵盖手臂条件中match所有enum情况的表达式。match

弱警告 弱警告

语句的正文为空

报告具有空主体的语句。

虽然偶尔有用,但此类陈述通常是拼写错误的结果,可能会引起混淆。

警告 警告

操作数与不兼容类型的严格比较

报告在具有不兼容类型的操作数上使用的===或严格比较。!==

有关详细信息,请参阅PHP 类型比较表 (php.net)

弱警告 弱警告

可疑名称组合

报告变量或参数的名称可能与分配或传递的值的名称不匹配的赋值和函数调用。

支持以下名称集:
  • needle,haystack

  • x,y

  • top, bottom, left,right

  • year, month, week, day, hour, minute,second

警告 警告

没有默认分支的 switch 语句

报告switch没有默认分支的语句。

信息没有高亮,只有修复

不必要的语句使用

报告use包含非完全限定类名并因此无效的语句。检验只报告类进口;不考虑函数和常量导入。

有关详细信息,请参阅使用命名空间:别名/导入 (php.net)

警告 警告

未使用的“匹配”条件

报告match表达式中永远不会匹配的条件。

与 PHP 引擎的行为类似,检查使用严格比较 ( ===) 来检查match条件中的类型与match参数类型,而不管strict_types指令如何。由于没有发生类型强制,因此某些条件可能由于类型不匹配而导致不匹配。

有关详细信息,请参阅匹配表达式 (php.net)

弱警告 弱警告

未使用的“开关”分支

switch报告不属于枚举案例集的语句中的分支,因此永远不会执行。

有关详细信息,请参阅枚举 (php.net)

弱警告 弱警告

使用的无效函数结果

报告void函数返回值的使用情况。

由于void函数没有返回值,因此这种用法很可能是编程错误。

警告 警告

错误的字符串连接

+报告使用运算符而不是点 ( .) 连接运算符连接字符串的尝试。这种尝试很可能是编程错误。

警告 警告

常用表达

检查

描述

默认严重性

星号闭包可以折叠成加号闭包

报告包含以星号结尾的重复字符*(例如aa*)的正则表达式模式。此类模式可以替换为a+.

弱警告 弱警告

类中的元素已经涵盖

报告正则表达式字符类中已被同一类中的另一个元素覆盖的元素。这些元素是多余的,可以安全地删除。

弱警告 弱警告

类中的范围可以合并

报告仅调整现有范围的正则表达式字符类中的字母范围或字符。这些元素可以与调整后的范围合并。

弱警告 弱警告

命名约定

检查

描述

默认严重性

类名不符合编码约定

报告太短、太长或不遵循指定正则表达式模式的类名称。一些编码风格对类有特殊的命名约定。

使用检查选项来指定最小/最大长度和类名所期望的正则表达式。要忽略名称的长度,请指定 0。

要了解有关正则表达式的更多信息,请参阅快速入门指南 (regular-expressions.info)

已禁用

常量名称不遵循编码约定

报告太短、太长或不遵循指定正则表达式模式的常量名称。一些编码风格对常量有特殊的命名约定。

使用检查选项指定最小/最大长度和常量名称预期的正则表达式。要忽略名称的长度,请指定 0。

要了解有关正则表达式的更多信息,请参阅快速入门指南 (regular-expressions.info)

已禁用

函数名称不符合编码约定

报告太短、太长或不遵循指定正则表达式模式的函数名称。一些编码风格对函数有特殊的命名约定。

使用检查选项指定最小/最大长度和函数名称预期的正则表达式。要忽略名称的长度,请指定 0。

要了解有关正则表达式的更多信息,请参阅快速入门指南 (regular-expressions.info)

已禁用

方法名称不符合编码约定

报告方法名称太短、太长或不遵循指定的正则表达式模式。一些编码风格对方法有特殊的命名约定。

使用检查选项来指定最小/最大长度和方法名称预期的正则表达式。要忽略名称的长度,请指定 0。

要了解有关正则表达式的更多信息,请参阅快速入门指南 (regular-expressions.info)

已禁用

属性名称不遵循编码约定

报告太短、太长或不遵循指定正则表达式模式的属性名称。一些编码风格对属性有特殊的命名约定。

使用检查选项指定最小/最大长度和属性名称预期的正则表达式。要忽略名称的长度,请指定 0。

要了解有关正则表达式的更多信息,请参阅快速入门指南 (regular-expressions.info)

已禁用

变量名不符合编码约定

报告太短、太长或不遵循指定正则表达式模式的变量名称。一些编码风格对变量有特殊的命名约定。

使用检查选项指定最小/最大长度以及变量名称所期望的正则表达式。要忽略名称的长度,请指定 0。

要了解有关正则表达式的更多信息,请参阅快速入门指南 (regular-expressions.info)

已禁用

一般的

检查

描述

默认严重性

带有名称标识符的参数

报告带有名称标识符的参数。

信息没有高亮,只有修复

没有名称标识符的参数

报告没有名称标识符的参数。

信息没有高亮,只有修复

数组索引立即被重写

报告数组索引上的写入表达式,这些索引在被访问之前立即被覆盖。

警告 警告

类不能直接实现 Traversable

报告单独实现接口的类,而不是Traversable作为接口的一部分。IteratorIteratorAggregate

Traversable接口为内部引擎接口;它不能在 PHP 脚本中实现。有关详细信息,请参阅Traversable 接口 (php.net)

错误 错误

类层次结构检查

检查类的层次结构:抽象方法实现、实现/覆盖方法与其在父类中的声明的兼容性,以及属性的类型重新声明。

所有报告的违规都会导致 PHP 致命错误。不建议禁用或抑制此检查。

错误 错误

花括号访问语法用法

报告大括号语法用于访问数组元素和字符串偏移量的用法。

错误 错误

已弃用

报告已弃用实体的使用情况。

在大多数情况下,应删除此类用法或将其替换为其他构造。

弱警告 弱警告

已弃用的“可序列化”接口用法

报告已弃用Serializable接口的使用情况。

从 PHP 8.1 开始,非抽象类、实现类Serializable和不实现__serialize()__unserialize()将抛出弃用警告。

有关详细信息,请参阅逐步淘汰可序列化 (php.net)

警告 警告

弃用“内爆/加入”用法

报告不推荐使用implodeandjoin函数。

从 PHP 7.4 开始,不推荐使用implodeandjoin将数组作为第一个参数,将字符串作为第二个参数。

有关详细信息,请参阅PHP 7.4 (php.net)的弃用。

警告 警告

已弃用的标准库调用

报告对从 PHP 8.1 开始弃用的标准 PHP 库函数的调用。

报告了以下调用:
  • key(), current(), next(), prev(), 和reset()以对象为参数的调用。

  • mb_check_encoding()没有参数的调用。

  • get_class(),get_parent_class()get_called_class()不带参数的调用。

  • IntlCalendar::roll()使用布尔值作为$value参数传递的调用。

  • ctype_*()使用非字符串参数调用。

有关详细信息,请参阅PHP RFC:PHP 8.1 弃用

警告 警告

弃用的演员表

报告不推荐使用的强制转换表达式:

  • (unset)强制转换表达式,在 PHP 7.2 及更高版本中已弃用。

  • (real)强制转换表达式,在 PHP 7.4 及更高版本中已弃用。

有关详细信息,请参阅PHP 7.2.x (php.net) 中已弃用的功能PHP 7.4 (php.net)的弃用功能。

弱警告 弱警告

禁用的扩展存根

报告类、函数和常量的使用情况,对应的 PHP 解释器扩展的存根被禁用。

您可以在 Settings/Preferences | 下配置存根集。PHP | PHP 运行时。

有关详细信息,请参阅PhpStorm 存根 (blog.jetbrains.com/phpstorm)

信息没有高亮,只有修复

称为静态的动态方法

报告对动态类方法的静态调用。

对于具有魔术方法__callStatic的类,可以设置单独的检查严重性和突出显示级别。

警告 警告

元素在配置的 PHP 版本中不可用

报告在 PHP 版本中引入的实体的使用情况,该版本晚于配置的版本。

错误 错误

忽略的类别名声明

报告 IDE 忽略的类别名声明,因为存在具有相同 FQN 的实际类声明。

该检查旨在阐明在类和类别名声明都存在的情况下 IDE 的行为。当存在多个具有相同 FQN 的声明时,IDE 通常无法在它们之间选择一个。这会导致不正确的代码完成、错误的类型推断等等。由于类声明优先于类别名声明,后者变得多余,因此被 IDE 忽略。

请注意,忽略类别名声明不会影响 PHP 解释器的行为。

弱警告 弱警告

不正确的魔术方法签名

报告不兼容的魔术方法签名。

有关详细信息,请参阅RFC:确保魔法方法的正确签名 (php.net)

错误 错误

无效的魔法方法修饰符

报告未声明为公共或声明为静态的魔术方法。

警告 警告

语言水平

报告所选语言级别不支持的源代码中使用的语言功能。

例如,联合类型只能在 PHP 8.0 及更高版本中使用。

错误 错误

父类中的方法声明与实现的接口不兼容

报告与实现的接口不兼容的父类中的方法声明。

错误 错误

命名参数可能无法解析

根据层次结构中的特定类实例,报告可能无法解析的方法调用中的命名参数。

弱警告 弱警告

嵌套三元运算符用法

报告嵌套的三元表达式,从 PHP 7.4 开始不推荐使用。

错误 错误

参数名称在继承期间更改

报告名称与父方法中定义的相同参数不同的方法参数。从 PHP 8.0 开始,此类代码可能会导致运行时错误。

弱警告 弱警告

促进财产使用

报告通过提升的构造函数参数声明的属性。

自 PHP 8.0 起才可以使用提升属性。在早期的 PHP 版本中,它会导致解析错误。

有关详细信息,请参阅Constructor Property Promotion (php.net)

信息没有高亮,只有修复

物业可以升职

报告可以用升级版本替换的属性。

有关详细信息,请参阅Constructor Property Promotion (php.net)

信息没有高亮,只有修复

属性立即被重写

报告在被访问之前立即被覆盖的属性的写表达式。

警告 警告

第二次写入“只读”属性

报告readonly属性的重新分配。初始化后无法修改此类属性。

有关详细信息,请参阅只读属性 (php.net)

错误 错误

静态方法称为动态

报告对静态类方法的动态调用。

如果目标有魔术方法__call,则可以设置单独的检查严重性和突出显示级别。

已禁用

未解决的包括

报告未解析include的 、include_oncerequirerequire_once表达式。

弱警告 弱警告

内部实体的使用

报告标记为@internal并位于不同源根中的实体的使用情况。不报告位于同一源根目录中的用法。

在大多数情况下,应删除报告的用法或将其替换为其他构造。

弱警告 弱警告

对声明范围之外的“只读”属性的写访问

readonly报告对声明范围之外的属性的写访问。声明范围实际上意味着声明属性的类的非静态方法。

有关详细信息,请参阅只读属性 (php.net)

错误 错误

错误处理

检查

描述

默认严重性

冗余捕获子句

报告catch具有从不从相应try块中抛出的异常的子句。

弱警告 弱警告

未处理的异常

报告既没有包含在try-catch块中也没有通过@throws标签记录的异常。

弱警告 弱警告

错误的 catch 子句顺序

报告已经被前面的异常捕获的异常以及被捕获两次的异常。

catch子句必须从更具体到更通用的顺序排列。否则,某些异常可能不会被最具体的处理程序捕获。

有关详细信息,请参阅异常 (php.net)

警告 警告

类型兼容性

检查

描述

默认严重性

“null”与参数的声明类型不兼容

报告通过引用不兼容的参数传递它们初始化的变量null

错误 错误

不支持的操作数的算术运算

报告带有不受支持的操作数的算术和按位表达式。

从 PHP 8.0 开始,当操作数之一是数组、资源或非重载对象时,使用算术和位运算符+, -, *, /, **, %, <<, >>, &, |, ^, ~,将产生. 唯一的例外是合并操作,它仍然受支持。++--TypeErrorarray + array

有关完整的操作列表,请参阅PHP 的内部测试源

错误 错误

非法类型的数组偏移访问

报告用于非法类型的数组偏移访问表达式。

弱警告 弱警告

非法数组键类型

报告非法类型的数组键,例如对象或数组。

有关详细信息,请参阅数组 (php.net)

警告 警告

非法字符串偏移

报告integer字符串访问表达式(例如$str[42].

从 PHP 5.4 开始,字符串偏移量必须是整数或类似整数的字符串。由于使用字符串作为字符串偏移量被认为是不好的做法,因此检查也会报告它们。

有关详细信息,请参阅按字符访问和修改字符串 (php.net)

警告 警告

返回类型不兼容

报告return其返回值类型与为函数/方法声明的语句不兼容的语句。

警告 警告

为“foreach()”提供的参数无效

报告在、、或类型foreach的变量上使用的构造。stringfloatintboolean

有关详细信息,请参阅foreach (php.net)

警告 警告

缺少参数的类型声明

报告未指定类型声明的参数。

弱警告 弱警告

缺少属性的类型声明

报告没有类型声明的属性。

弱警告 弱警告

缺少返回类型声明

报告没有指定返回类型声明的函数。

弱警告 弱警告

缺少严格的类型声明

检测文件中缺少的declare(strict_types=1)指令。

请参阅严格类型 (php.net)以了解有关您可能需要使用此指令的原因的更多信息。

已禁用

参数类型

@param报告传递给函数调用的参数,其类型与通过类型声明或 PHPDoc标记在函数定义中指定的类型不匹配。

有关详细信息,请参阅类型声明 (php.net)@param (phpdoc.org)

警告 警告

冗余交叉口类型

报告包含冗余类型的交集类型声明,例如,包含父类及其子类的交集类型。

有关详细信息,请参阅PHP RFC:纯交集类型 (php.net)

弱警告 弱警告

严格的类型检查规则违规

报告违反严格类型检查规则的行为。

在严格模式下,只接受与声明类型完全匹配的变量。可以启用严格的类型检查模式:
  • 每个文件,如果declare(strict_types=1)指定了指令。该指令必须是文件中的第一条语句,明确禁止块模式。

  • 对于所有文件,如果启用所有文件检查选项。

有关详细信息,请参阅严格类型 (php.net)

错误 错误

类型声明是多余的,可以简化

报告包含冗余类型的联合类型声明,例如,包含类别名和原始类的联合类型。

有关详细信息,请参阅联合类型 RFC:重复和冗余类型 (php.net)

弱警告 弱警告

属性分配中的类型不匹配

报告属性分配中的类型违规。

警告 警告

未定义的符号

检查

描述

默认严重性

多个类声明

报告对在项目文件中具有多个声明的类的引用。

使用以下选项自定义检查:
  • 忽略 PHPDoc:如果选中,检查将不会报告 PHPDoc 块中引用的类的多个声明。

弱警告 弱警告

可能的多态调用

报告多态代码使用情况。这种用法是模棱两可的,并且根据作为参数传递的类实例可能无法操作。

弱警告 弱警告

未定义的回调

报告从回调中引用但未找到的函数、方法、属性或类。

使用以下选项自定义检查:
  • 忽略来自 *_exists 和 is_callable 函数的回调:如果选中,检查将跳过来自method_existsfunction_existsproperty_exists和函数class_exists的回调引用。is_callable

  • 不明确不报告:如果选中,检查将跳过具有多种可能类型的参数,例如标记为callable|string

已禁用

未定义的类

报告对在项目文件、配置的包含路径或 PHP 预定义类中未找到其声明的类的引用。

使用以下选项自定义检查:
  • 忽略 PHPDoc:如果选中,则检查不会报告 PHPDoc 块中引用的未定义类。

警告 警告

未定义的类常量

报告对未声明的类常量的引用。

错误 错误

未定义常量

报告对项目文件、配置的包含路径或 PHP 预定义常量中未找到的常量的引用。

警告 警告

未定义函数

报告对项目文件、配置的包含路径或 PHP 预定义函数中未定义的函数的引用。

警告 警告

未定义的转到标签

报告goto当前范围内未找到的标签。

目标goto标签必须驻留在同一文件和上下文中:您不能跳入或跳出函数或方法,也不能跳入循环或切换结构。

有关详细信息,请参阅goto (php.net)

警告 警告

未定义的方法

报告对未定义的类方法的引用。

警告 警告

未定义的命名空间

报告对未找到的命名空间的引用。

警告 警告

未定义的属性

报告对未声明的类属性的引用。

检查会跳过stdClass派生类型或派生类型的对象。

警告 警告

未定义的变量

产生两种类型的警告:

  • 未定义变量:在项目文件、配置的包含路径或 PHP 预定义变量中找不到该变量的定义。

  • 变量可能尚未定义:有一条或多条路径可以到达使用变量的行而不定义它。

使用以下选项自定义检查:
  • 报告变量可能未定义:清除复选框以禁用变量可能未定义警告。

  • 在全局空间中启用检查:默认情况下,对全局空间启用检查。清除复选框以仅报告函数本地范围内的未定义变量。

  • 在当前文件之外搜索变量的定义:如果选中,IDE 仅在当前文件中没有includeorrequire语句且在项目中找不到变量定义的情况下才会将全局变量报告为未定义。

    否则,如果未选择,IDE 将仅在当前文件中搜索变量的定义并忽略includeorrequire语句(如果有)。

错误 错误

质量工具

检查

描述

默认严重性

PHP CS Fixer 验证

报告 PHP CS Fixer 检测到的编码风格问题。

检查需要在 IDE 中的 Settings/Preferences | 下正确安装和设置 PHP CS Fixer PHP | 质量工具 | PHP CS 修复程序。

要了解有关安装 PHP CS Fixer 的更多信息,请参阅PHP-CS-Fixer 安装 (GitHub)

已禁用

PHP Mess Detector 验证

报告 PHP Mess Detector 检测到的编码风格问题。

检查需要在 IDE 中的 Settings/Preferences | 下正确安装和设置 PHP Mess Detector PHP | 质量工具 | 混乱探测器。

要了解有关安装 PHP Mess Detector 的更多信息,请参阅PHP Mess Detector 安装 (phpmd.org)了解详细信息。

您可以使用一组预定义的规则,也可以通过指定有效的ruleset.xml文件来添加您自己的规则。有关详细信息,请参阅规则索引 (phpmd.org)如何创建自定义规则集 (phpmd.org)

已禁用

PHPStan 验证

运行 PHPStan 以查找代码问题。

检查需要在 IDE 中的 Settings/Preferences | 下正确安装和设置 PHPStan PHP | 质量工具 | PHP斯坦。

要了解有关安装 PHPStan 的更多信息,请参阅:https ://phpstan.org/user-guide/getting-started

已禁用

PHP_CodeSniffer 验证

报告 PHP_CodeSniffer 检测到的编码风格问题。

检查需要 PHP_CodeSniffer 在 IDE 中的 Settings/Preferences | 下正确安装和设置。PHP | 质量工具 | PHP_CodeSniffer。

要了解有关安装 PHP_CodeSniffer 的更多信息,请参阅PHP_CodeSniffer 安装 (GitHub)

已禁用

诗篇验证

运行 Psalm 以查找代码问题。

检查需要在 IDE 中的 Settings/Preferences | 下正确安装和设置 Psalm PHP | 质量工具 | 诗篇。要了解有关安装 Psalm 的更多信息,请参阅:https ://psalm.dev/docs/running_psalm/installation/

已禁用

未使用的符号

检查

描述

默认严重性

冗余属性初始化器

报告具有始终在类构造函数中覆盖的默认初始值设定项的字段。

弱警告 弱警告

未使用的声明

报告未使用或无法从入口点访问的类、方法、函数、常量或属性。它还报告所有方法实现/覆盖。

一些未使用的成员可能不会在代码编辑器中即时报告。由于性能原因,非私有成员仅在其名称很少出现在项目中时才被检查。

要查看所有结果,请使用 Code | 以批处理模式运行检查。检查代码...或代码 | 按名称运行检查....

弱警告 弱警告

未使用的导入

报告从未使用过的导入。

弱警告 弱警告

未使用的局部变量

报告在以下情况下被视为未使用的变量:

  • 变量的值不在任何地方使用或立即被覆盖。

  • 存储在变量中的引用不会在任何地方使用或立即被覆盖。

弱警告 弱警告

未使用的参数

报告在以下情况下被视为未使用的参数:

  • 参数是按值传递的,该值不会在任何地方使用或立即被覆盖。

  • 参数是通过引用传递的,并且引用不会在任何地方使用或立即被覆盖。

弱警告 弱警告

未使用的私有方法

报告从未使用的私有方法。

弱警告 弱警告

未使用的私有财产

报告从未使用的私有属性。

弱警告 弱警告

重构机会

检查

描述

默认严重性

类有太多声明的成员

报告具有太多属性或方法的类。

已禁用

复杂类应该重构

报告过于复杂的类。

类复杂度基于三个指标进行评估:
  • TCC(Tight class cohesion)——类凝聚力的衡量标准(越多越好)。

  • WMC(加权方法计数)——一个类中所有方法的圈复杂度的总和(越少越好)。

  • ATFD(访问外部数据)——在当前类中访问的另一个类的属性数量(越少越好)。

已禁用

复杂的功能应该重构

报告过于复杂的函数或方法。

复杂性基于四个指标进行评估:
  • 代码行数——函数/方法中的代码行数(越少越好)

  • 最大嵌套深度——函数/方法体中嵌套语句的最大数量(越少越好)

  • 圈复杂度 — 函数/方法的圈复杂度(越少越好)

  • Number of variables — 函数/方法体中使用的变量数

已禁用

函数的圈复杂度太高

报告具有高圈复杂度并且可能可以简化的方法。

有关详细信息,请参阅圈复杂度 (wikipedia.org)

已禁用

霍尔斯特德度量

报告具有高 Halstead 复杂度指标的方法。

有关详细信息,请参阅Halstead 测量 (wikipedia.org)

已禁用

LCOM 指标

报告具有高 Lack of Cohesion 度量值的类,该值表示类的内聚程度。

它使用类依赖图组件进行类内聚性度量(M. Hitz 和 B. Montazeri 对 LCOM 度量的定义)

已禁用

会员可以拉起来

报告应该拉到父类或接口的类方法和属性。

已禁用

方法对另一个类有特征嫉妒

报告“功能嫉妒”代码气味。特性嫉妒被定义为当一个方法调用另一个类的方法的次数多于源类的方法时发生。它通常表明预期的功能位于错误的类中。

此检查不计算对库类、父类以及包含或包含类的调用。

已禁用

PHP文档

检查

描述

默认严重性

不恰当的@inheritDoc 使用

报告不当@inheritDoc使用:

  • 关于非班级成员

  • 在没有任何超级成员有文档评论的班级成员上。

弱警告 弱警告

PHPDoc 注释匹配函数/方法签名

报告 PHPDoc 注释中与函数/方法声明中的参数名称和类型不匹配的参数名称和类型。

弱警告 弱警告

冗余 @throws 标签

报告@throws函数/方法未引发的异常的标签。

添加到设置/首选项下的未检查异常列表中的异常类 | PHP | 分析排除在检查范围之外。

弱警告 弱警告

冗余 @var 标记

报告@var已从源代码推断出类型的变量的标签。

弱警告 弱警告

多余的 PHPDoc 注释

报告仅包含已在声明中提供的信息的 PHPDoc 注释。

信息没有高亮,只有修复

PHPDoc 注释中的返回类型与实际返回类型不匹配

报告 PHPDoc 注释中与函数的实际返回类型不匹配的返回类型。

弱警告 弱警告

PHPDoc 标记中已存在类型

报告 PHPDoc 注释中的重复类型。

弱警告 弱警告

类型与属性声明的类型不匹配

报告 PHPDoc@var标记中与属性声明类型不匹配的属性类型。

弱警告 弱警告

最后修改:2022 年 2 月 11 日