PhpStorm 2020.3 最新变化

PhpStorm 2020.3 是一个主要更新,引入了对 PHP 8、PHPStan、Psalm、Tailwind CSS、Xdebug 3 的支持,并且可以通过 Code With Me 进行协作开发。

PHP 8

PHP 8.0 是一个主要语言更新,提供了许多不可思议的新功能。 PhpStorm 将帮助您验证现有代码是否与之兼容,更快地更新代码库以及利用最新的语言改进。

查看语言版本

查看语言版本

现在,您始终可以看到项目中正在使用哪个语言版本。 我们在状态栏中放置了相应的指示器。 如果 composer.json 没有列出对 PHP 版本的任何限制,您还可以从此处更改语言版本。

添加命名参数标识符

命名参数

可以通过指定参数名称来传递 PHP 8 中的函数和方法参数。 这样便无需设置可选参数,也意味着调用现在可以自我归档。

PhpStorm 可以帮助:

  • 检查参数名称是否正确。
  • 使用 Alt+Enter 快速修复自动添加参数名称。
  • 移除冗余参数。
转换为提升的属性

构造函数属性提升

通过构造函数初始化变量时,此功能使您可以减少样板代码量。

在 PhpStorm 中,您可以将构造函数初始化的属性转换为提升属性,或者使用 Convert to promoted property (Alt+Enter) 快速修复将其改回原来的状态。

验证 nullsafe 运算符用法

Null 安全运算符

不必使用繁琐的条件进行 null 检查,新的 ?-> 运算符允许您为每个元素构建带有隐式检查的调用链。

PhpStorm 可以确保正确使用运算符。

将 switch 语句转换为 match 表达式

Match 表达式

新的 match 表达式是 switch 语句一种类型安全且紧凑的替代。 match 表达式可以用作值并分配给变量或者被返回。

PhpStorm 会确定是否可以将 switch 块转换为 match 表达式,并使用 Alt+Enter 快速修复来自动执行此操作。

使用新的表达式时,可能会很难看到误用。 PhpStorm 将为您高亮显示它们。

字符串的新函数

字符串的新函数:str_contains()、str_starts_with()、str_ends_with()

在 PHP 8 中,可以使用 str_contains() 函数确定一个字符串是否为另一个字符串的一部分。 PhpStorm 2020.3 会显示可由 str_contains() 替换的 strpos() 的任何用法。

PhpStorm 还会高亮显示可以使用更一目了然的两个新函数 str_starts_with()str_ends_with() 来替换旧 substr() 调用的位置。

支持的其他 PHP 8 功能

支持的其他 PHP 8 功能

  • 函数调用中最后一个参数之后以及闭包的 use 部分中的尾随逗号。
  • 当您不需要异常对象时,非捕获 catch 对于捕获异常十分有用。
  • 现在可以将 throw 用作表达式(即,允许在箭头函数、合并运算符 ?? 和三元/elvis 运算符 ?: 中使用)。
  • 要从对象获取类 FQN,可以执行 $object::class,而不是 get_class($object)。 使用 Alt+Enter 快速修复即可。

PHP 8 特性

将 PHPDoc 转换为原生联合类型

PHP 8 允许您使用特性以结构化的方式指定元数据,而不必依赖 PHPDoc 注释。

PhpStorm 提供高亮显示、代码补全、查找用例、重构以及处理属性的其他编码辅助。 它还提供了检查来确保特性已被声明并得到有效使用。

PhpStorm 2020.3 提供了多个可以直接在 IDE 中使用的 PHP 8 特性。 We also provide them in a composer package jetbrains/phpstorm-attributes, so feel free to add it as a dependency in composer.json.

#[Deprecated] 特性

#[Deprecated]

@deprecated PHPDoc 标记一样,您可以使用此特性来标记将在软件的未来版本中移除的方法、函数、类或类常量。

指定 reasonreplacement,以便您的用户理解为什么需要升级,并让他们可以使用 Alt+Enter 快速修复自动完成升级。

#[ArrayShape] 特性

#[ArrayShape]

使用此特性定义类对象数组的键和值类型。 这将改进 PhpStorm 中的编码辅助和分析。

注:如果在一行中,也适用于 PHP 7.4 和更早版本。
#[Immutable]

#[Immutable]

如果要防止在初始化对象后进行任何更改尝试,请使用 #[Immutable] 特性标记对象或属性。

这会使程序状态更可预测,调试也更容易。

使用传递给特性构造函数的以下常量之一来调整属性的编写作用域限制:CONSTRUCTOR_WRITE_SCOPEPRIVATE_WRITE_SCOPEPROTECTED_WRITE_SCOPE

注:如果在一行中,也适用于 PHP 7.4 和更早版本。
#[Pure] 特性

#[Pure]

将不会产生任何副作用的函数标记为 #[Pure],以改进 PhpStorm 中的代码流分析。 IDE 将高亮显示纯函数的冗余调用。

如果将一个函数标记为 #[Pure],但是在其主体中尝试从外部作用域更改某些内容,PhpStorm 将高亮显示不安全的代码。

所有此类 PHP 内部函数(例如,array_merge())都在 PhpStorm 中进行了标记。

#[ExpectedValues] 特性

#[ExpectedValues]

使用此特性指定函数接受哪些值作为参数以及可以返回哪些值。 这将改进代码补全,并有助于检测可能的错误。

#[ExpectedValues].phpstorm.meta.phpexpectedArguments() 的高级版本。

#[NoReturn] 特性

#[NoReturn]

使用 #[NoReturn] 特性标记可以终止脚本执行的函数,以获得更准确的控制流分析。

PhpStorm 可通过快速修复跨层次结构向下传播特性,以实现定义更加准确的分析。

#[Language] 特性

#[Language]

将此特性添加到包含用其他语言(例如 RegExp、SQL 等)编写的文本的字符串参数中。 这将显示 PhpStorm 的其他功能。

Psalm 和 PHPStan 支持

这两种静态分析器都可以在 PhpStorm 2020.3 中作为一流的工具,用于在编辑器中高亮显示问题。 在 composer.json 中将它们添加为 dev-dependencies,然后通过点击工具旁边的扳手图标打开相应的检查。

PHPStan 和 Psalm

PhpStorm 还为 @psalm-* 标记提供了代码补全,并将其视为特殊标记,因此高亮显示、未定义的类等都不会出现问题。 在大多数情况下,现在可以安全地从标记中移除 @psalm- 前缀,即 @psalm-return 可以简单地变为 @return@psalm-param 可以变为 @param

支持许多 psalm 类型,包括标量、数字和带有常量的类型。 因此,依赖类型推断的所有内容都变得更加准确:检查、代码生成和补全。

Xdebug 3

Xdebug 3

Xdebug 3 是 PHP 调试器的全新设计。 它的工作速度更快并且更易于设置。

要配置 Xdebug 3,您唯一需要指定的就是 XDEBUG_MODE=debug

Xdebug 的默认调试端口已从 9000 更改为 9003。 为了简化迁移,默认情况下,PhpStorm 同时侦听这两个端口。 可以在 Preferences/Settings | Languages & Frameworks | PHP | Debug 下调整 Xdebug 的端口和其他设置。

Learn more about Xdebug 3 in the Upgrade Guide.

Code With Me

使用 Code With Me 进行的协作开发

PhpStorm 2020.3 支持 Code With Me,这是 JetBrains 为协作开发和结对编程提供的一项新服务。 利用 Code With Me,您可以与其他人共享 IDE 中当前打开的项目,并实时协同处理。

查看这些文章以详细了解 Code With Me。

Tailwind CSS

快速访问作为依赖项添加的工具设置

PhpStorm 现在可以帮助您更高效地使用 Tailwind CSS。

IDE 将自动补全 Tailwind 类,在鼠标悬停时为您显示所生成 CSS 的预览,并支持您使用 tailwind.config.js 文件进行的自定义。

HTTP客户端

使用 HTTP 客户端运行 Guzzle 请求

使用 HTTP 客户端运行 Guzzle 请求

Guzzle is one of the most popular HTTP clients for PHP. 在 PhpStorm 2020.3 中,您可以在不运行实际代码的情况下测试 Guzzle 请求。

如果请求受支持,它的旁边将出现一个装订区域图标。 点击此图标来创建一个已预填充参数的新 HTTP 临时文件。

处理请求,然后在项目中将其保存为 .http 文件。

将 HTTP 请求导出到 cURL

将 HTTP 请求导出到 cURL

要从 HTTP 请求中获取 cURL 字符串,请在 HTTP 请求编辑器中按 Alt+Enter,然后选择 Convert to cURL and copy to clipboard

您可以在终端中使用 cURL 字符串,也可以将此字符串与您选择的 HTTP 客户端一起使用。

编辑器

Markdown 编辑和预览增强

Markdown 编辑和预览增强

现在,可以在 IDE 内渲染 Mermaid.js 图和图表。 在 Preferences/Settings | Languages & Frameworks | Markdown 下启用此支持。

预览窗格的右上角有一个 Auto-Scroll Preview 按钮,用于启用和禁用与编辑器的同步滚动。

我们添加了许多热门的 Markdown 代码样式预设,当您使用 Ctrl+Alt+L 重新设置代码格式时,这些预设非常有用。 可以在 Preferences/Settings | Editor | Code Style | Markdown 中选择设置。

改进了拼写和语法检查

改进了拼写和语法检查

语法检查引擎支持更多种语言,并提供更高质量的语法检查。

当错误高亮显示时,将显示一个包含说明和建议修复的弹出窗口。

如果将脱字符号置于高亮显示的文本上并按 Alt+Enter,将在顶层看到建议的所有替换,而不是像以前那样的嵌套列表。

通过拖放拆分编辑器

通过拖放拆分编辑器

将一个标签页拖动到屏幕的所需一侧可以并排打开多个标签页。

在拆分模式下打开标签页的另一种方法是,在 Project 视图或任何搜索窗口中,在所选文件上按 Shift+Enter

Preview 标签页

Preview 标签页

您可以在特殊标签页中预览文件,而无需实际打开它们。 要启用此功能,请点击 Project 视图中的齿轮图标,然后选择 Enable Preview TabOpen Files with Single Click。 如果您开始编辑正在预览的文件,该标签页将变为一个普通文件。

IDE

Search Everywhere 改进

Search Everywhere 改进

在 Search Everywhere 弹出窗口 (Shift+Shift) 中,结果将以略微不同的方式显示。 现在,将不再按类型分组,而是根据与搜索查询的相关性对它们进行分组

现在,还可以在 Search Everywhere 中执行简单的数学计算。 输入一些数字和数学运算符,随后可以立即查看计算结果。 这样就无需切换到计算器应用并中断您的流程。

Search Everywhere 还可以搜索 Git 历史记录,包括有关分支和提交的信息。

Web 技术

WebStorm 2020.3 中的所有新功能和改进也都适用于 PhpStorm 2020.3,要么开箱即用,要么通过插件 Marketplace 中的免费插件提供。

Problems 工具窗口中的 TypeScript

Problems 工具窗口中的 TypeScript

我们已将 TypeScript 语言服务集成到 Problems 工具窗口中,并移除了 TypeScript 工具窗口,这样便可更轻松地在一个地方检查代码中的问题。 我们还将先前在 TypeScript 工具窗口中可用的操作移动到状态栏上的专用微件中。

根据用例创建 React 组件

根据用例创建 React 组件

如果您的代码中有未解析的 React 组件,请将脱字符号置于其中,按 Alt+Enter,然后选择 Create class/function component - IDE 将为您创建相关的代码结构。

版本控制

Git 暂存支持

Git 暂存支持

PhpStorm 2020.3 支持 Git 暂存区域。 要开启此功能,请在 Preferences/Settings | Version Control | Git 中勾选 Enable staging area 复选框。

使用 Alt+0 返回 Commit 工具窗口,查看已暂存和未暂存的文件。

通过点击文件附近的 + 图标来暂存相应文件

您可以使用编辑器中更改附近的装订区域图标暂存特定行

数据库工具

查看 DataGrip 2020.3 最新变化,也可以在 PhpStorm 中使用所有这些功能。

使用 SQL 查询 MongoDB

使用 SQL 查询 MongoDB

现在,您可以使用 SQL 查询 MongoDB 数据库了。 PhpStorm 2020.3 supports SELECT queries with clauses such as JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET, and all available MongoDB functions except map, reduce, filter, and let. 如果您想详细了解使用 SQL 查询 MongoDB,请阅读此博文

Couchbase 支持和新的数据提取工具

Couchbase 支持和新的数据提取工具

PhpStorm 现在支持 Couchbase Query 服务。 我们还引入了两个新的提取工具:One-RowSQL-Insert-Multirow。前者允许您将列复制到逗号分隔的字符串中,后者可生成包含多个要插入的新行的单个 INSERT 语句。