PhpStorm 2025.2 Help

PHP 8.0

PHP 8.0 带来了新功能、语法新增和错误修复。 有关此版本中新功能的更多信息,请参阅 发布公告。 有关迁移代码的更多信息,请参阅 从 PHP 7.4.x 迁移到 PHP 8.0.x指南。

命名参数

命名参数允许根据参数名称而不是位置向函数传递参数。 这样,函数调用变得自解释,参数顺序变得任意。

在函数调用中,您可以使用提供的快速修复 Alt+Enter 逐个或一次性为所有参数添加参数名称。 如果列表中有传递值与默认值匹配的参数,PhpStorm 会将其标记为未使用,并提供快速修复以删除它们。

添加命名参数

属性

通过 属性 ,您可以为类、属性、函数等声明提供结构化的语法元数据。 与 PHPDoc 注释 不同,属性在语言级别得到支持和验证。

要创建属性,请在类声明顶部添加 #[Attribute] 标记。 在属性中,可以选择性地提供 目标可重复性标志。 要使用 代码补全 ,请按 Ctrl+Space

创建 PHP 属性

多个 代码检查有助于确保正确使用属性:

  • 类不能用作属性检查会验证类是否在其参数声明中使用 #[Attribute] 进行了注解。

    类未使用属性注解
  • 不可应用的属性目标声明检查会验证属性是否在其参数声明中使用 #[Attribute::Target] 进行了注解,并因此应用于正确的目标,例如类或方法。

    属性目标不正确
  • 不可重复的属性检查会突出显示在其参数声明中未设置 Attribute::IS_REPEATABLE 标志的重复属性。

    不可重复的属性

联合类型

联合类型接受多种不同类型的值,而不是单一类型。 联合类型被指定为 Type1|Type2|... ,并且可以在接受常规类型的所有地方使用。 所有现有的 PhpStorm 编码辅助功能完全支持联合类型。

如果通过 PHPDoc 提供联合类型,PhpStorm 会提供快速修复 Alt+Enter ,将其转换为原生联合类型。

将 PHPDoc 联合类型转换为原生声明

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

联合类型声明中的类型检查

构造函数属性提升

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

您可以使用快速修复 Alt+Enter 将构造函数参数转换为提升的属性。

将构造函数参数转换为提升的属性

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

提升属性检查

匹配表达式

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

将 switch 语句转换为匹配表达式

多个 代码检查有助于确保正确使用 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 被不适当地使用。

在一个对象上使用 ::class

字符串的新函数

PHP 8 引入了几个用于处理字符串的新函数。 str_contains函数检查一个字符串是否包含在另一个字符串中。 str_starts_with 和 str_ends_with函数用于确定字符串是否以特定子字符串开头或结尾。 'str*' 调用可以替换为 PHP 8 'str_*' 调用检查会突出显示可以替换为其现代且更具自解释性的替代项的 strpossubstr 调用,并提供相应的快速修复 Alt+Enter

用于处理字符串的函数
最后修改日期: 2025年 9月 26日