PHP 8.0
PHP 8.0 带来了新功能、语法新增和错误修复。 有关此版本中新功能的更多信息,请参阅 发布公告。 有关迁移代码的更多信息,请参阅 从 PHP 7.4.x 迁移到 PHP 8.0.x指南。
命名参数
命名参数允许根据参数名称而不是位置向函数传递参数。 这样,函数调用变得自解释,参数顺序变得任意。
在函数调用中,您可以使用提供的快速修复 Alt+Enter 逐个或一次性为所有参数添加参数名称。 如果列表中有传递值与默认值匹配的参数,PhpStorm 会将其标记为未使用,并提供快速修复以删除它们。

属性
通过 属性 ,您可以为类、属性、函数等声明提供结构化的语法元数据。 与 PHPDoc 注释 不同,属性在语言级别得到支持和验证。
要创建属性,请在类声明顶部添加 #[Attribute] 标记。 在属性中,可以选择性地提供 目标和 可重复性标志。 要使用 代码补全 ,请按 Ctrl+Space。

多个 代码检查有助于确保正确使用属性:
类不能用作属性检查会验证类是否在其参数声明中使用
#[Attribute]进行了注解。
不可应用的属性目标声明检查会验证属性是否在其参数声明中使用
#[Attribute::Target]进行了注解,并因此应用于正确的目标,例如类或方法。
不可重复的属性检查会突出显示在其参数声明中未设置
Attribute::IS_REPEATABLE标志的重复属性。
联合类型
联合类型接受多种不同类型的值,而不是单一类型。 联合类型被指定为 Type1|Type2|... ,并且可以在接受常规类型的所有地方使用。 所有现有的 PhpStorm 编码辅助功能完全支持联合类型。
如果通过 PHPDoc 提供联合类型,PhpStorm 会提供快速修复 Alt+Enter ,将其转换为原生联合类型。

通过原生声明的联合类型,PhpStorm 可以分析调用并检测问题区域。 检查适用于所有级别:属性、参数和返回值。

构造函数属性提升
通过 构造函数属性提升 ,您可以直接在构造函数中声明和初始化类属性。 如果您为构造函数参数提供了可见性修饰符,例如 public、 protected 或 private ,该参数将被解释为对象属性,其值将被分配给该属性。 这使得对象更小、更易读,并有助于减少在构造函数中初始化变量时的样板代码量。
您可以使用快速修复 Alt+Enter 将构造函数参数转换为提升的属性。

PhpStorm 验证提升的属性是否符合 PHP 8 限制。 例如,提升的属性不能在构造函数外部或抽象构造函数内部声明,并且可变参数不能被提升。

匹配表达式
匹配表达式类似于 switch ,但提供了更安全的语义并且可以返回一个值。 PhpStorm 检测到可以转换为 match 表达式的 switch 语句,并提供专用的快速修复 Alt+Enter 来完成此操作。

多个 代码检查有助于确保正确使用 match 表达式:
如果表达式参数的类型与任何指定条件不匹配,表达式将导致
Fatal Error。 在这种情况下,您可以使用提供的快速修复添加默认分支。
未使用的 'match' 条件检查会突出显示从未匹配的条件,并建议删除它们。

未使用的条件检查会检测到永远不会运行的重复条件。 您可以在它们之间导航,并删除整个分支或仅从值列表中删除重复的值。

'match' 表达式中的重复分支检查会检测到不同分支中相同的主体,可以将其合并为一个以减少块的大小。

'match' 表达式可以替换为三元表达式检查会检测到具有单个分支和
默认分支的表达式,并允许您将它们替换为三元表达式。
如果匹配表达式只有一个默认分支,那么它可能是多余的。 冗余的 'match' 表达式检查会突出显示此类表达式,并允许您删除它们。

空安全操作符
通过 空安全操作符?-> ,您可以用链式调用替换嵌套的空检查条件。

PhpStorm 验证空安全操作符未被错误地用于写入上下文或作为引用。

非捕获型捕获
从 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。
