PHP 8.0
PHP 8.0 带来了新特性、语法添加和错误修正。有关此版本的新功能的详细信息,请参阅发布公告。有关迁移代码的详细信息,请参阅从 PHP 7.4.x 迁移到 PHP 8.0.x指南。
命名参数
命名参数允许根据参数名称而不是位置将参数传递给函数。这样,函数调用变得自记录,参数顺序变得任意。
在函数调用中,您可以使用提供的快速修复Alt+Enter将参数名称一一添加或一次添加到所有参数。如果列表中有参数的传递值与默认值匹配,PhpStorm 会将它们突出显示为未使用并提供快速修复以删除它们。
属性
使用attributes,您可以为类、属性、函数等的声明提供结构化的语法元数据。与PHPDoc 注释不同,属性在语言级别得到支持和验证。
要创建属性,请#[Attribute]
在类声明的顶部添加标记。在属性内部,可选择提供目标和可重复性标志。要使用代码完成,请按Ctrl+Space。
一些代码检查有助于确保正确使用属性:
Class 不能用作属性检查来验证类在其参数声明中是否带有注释
#[Attribute]
。Non-applicable 属性目标声明检查验证属性是否在其参数声明中注释,因此
#[Attribute::Target]
应用于正确的目标,例如类或方法,不可重复属性检查突出显示
Attribute::IS_REPEATABLE
在其参数声明中未设置标志的重复属性。
联合类型
联合类型接受多种不同类型的值,而不是单一类型。联合类型被指定为Type1|Type2|...
并且可以在所有接受常规类型的地方使用。所有现有的 PhpStorm编码辅助功能都完全支持联合类型。
如果联合类型是通过 PHPDoc 提供的,PhpStorm 提供了一个快速修复Alt+Enter来将其转换为本机联合类型。
使用本机声明的联合类型,PhpStorm 可以分析调用并检测问题区域。检查适用于所有级别:属性、参数和返回值。
建设者物业推广
使用构造函数属性提升,您可以直接在构造函数中声明和初始化类属性。如果您为构造函数参数提供可见性修饰符(例如public
、protected
或private
),则该参数将被解释为对象属性,并且其值将分配给该属性。这使对象更小、更易读,并有助于减少通过构造函数初始化变量的样板代码量。
您可以使用 quick-fix 将构造函数参数转换为提升的属性Alt+Enter。
PhpStorm 验证提升的属性是否按照PHP 8 约束使用。例如,不能在构造函数外部或抽象构造函数内部声明提升的属性,也不能提升可变参数。
匹配表达式
匹配表达式类似于但提供switch
更安全的语义并且可以返回一个值。PhpStorm 检测switch
可以转换为match
表达式的语句并提供专用的快速修复Alt+Enter来执行此操作。
一些代码检查有助于确保match
正确使用表达式:
如果表达式参数的类型不匹配任何指定条件,则表达式将导致
Fatal Error
. 在这种情况下,您可以default
使用提供的快速修复来添加手臂。未使用的“匹配”条件检查突出显示从未匹配的条件并建议将其删除。
未使用条件检查检测永远不会运行的重复条件。您可以在它们之间导航并从值列表中删除整个臂或仅删除重复值。
'match' 表达式检查中的Duplicate arm检测不同 arm 中的相同主体,可以将其合并为一个以减小块的大小。
' match' 表达式可以替换为三元表达式检查将检测具有单臂和
default
臂的表达式,并让您将它们替换为三元表达式。如果匹配表达式只有一个默认分支,那么它可能是多余的。冗余“匹配”表达式检查将突出显示此类表达式并让您删除它们。
Nullsafe 运算符
使用nullsafe 运算符 ?->
,您可以将嵌套的空检查条件替换为链式调用。
PhpStorm 验证 nullsafe 运算符没有错误地用于写入上下文或作为参考。
非捕获渔获物
从 PHP 8 开始,您可以捕获异常而不将它们捕获到变量中。未使用的局部变量检查检测catch
语句中未使用的变量并提供快速修复Alt+Enter以删除它们:
抛出表达式
在 PHP 8 中,在所有接受表达式的地方都允许抛出异常,例如在箭头函数、合并运算符??
和三元运算符?:
中。PhpStorm 提供了一个实时模板,可让您快速添加throw
表达式。要应用它,请键入thr
并按Tab。
在对象上使用 ::class
在以前的 PHP 版本中,要获得类 FQN,您可以使用ClassName::class
. 但是,在对象上,您必须调用get_class()
. 在 PHP 8 中,get_class()
调用可以安全地替换为$object::class
. PhpStorm 对此提供了快速修复,如果使用不当Alt+Enter也会发出警告。::class
字符串的新函数
PHP 8 引入了几个处理字符串的新函数。str_contains函数检查一个字符串是否包含在另一个字符串中。str_starts_with 和 str_ends_with函数用于确定字符串是否以特定子字符串开头或结尾。' str*' 调用可以替换为 PHP 8 'str_*' 调用检查突出显示strpos
和substr
调用可以替换为现代和更不言自明的替代方案,并提供相应的快速修复Alt+Enter。