跳转到主要内容
OpenIDEA 开箱即可高亮 PHP 文件(.php、.phtml、.phpt 以及老式的 .php3–.php5,还有以 <?php 或 php shebang 开头的文件)。补全、跳转、重构和诊断由 Intelephense 提供。Composer 脚本和 PHPUnit/Pest 测试套件会被识别为运行配置,Xdebug 调试通过 PHP Debug 适配器进行。其他语言见支持矩阵。

语言服务器

Intelephense 会按项目的 PHP 版本检查代码(见下文“语言级别”),并索引你配置的 stub 和包含路径。

环境配置

安装工具

打开 .php 文件时如果缺少 Intelephense,IDE 会弹出通知并提供 安装 按钮,用 npm 把它装进 IDE 自己的工具目录(需要 PATH 上有 npm 或 pnpm)。所有工具也都列在 设置 › 语言和框架 › 语言服务器 中。

PHP 解释器

设置 › 语言和框架 › PHP 的 CLI 解释器 部分:
  • PHP 解释器:运行脚本、PHPUnit、Composer、artisan 以及 phpactor 等基于 PHP 的服务器所用的 php。默认 表示使用 PATH 上的 php。所选解释器的目录会被放到 PATH 最前面,因此 vendor/bin/phpunit 等 #!/usr/bin/env php 脚本也会用同一个 PHP。列表包括 PATH 上的 PHP(含 php8.3 这类带版本号的可执行文件)、Homebrew、phpbrew、phpenv、Laravel Herd,Windows 上还有 XAMPP 和 Laragon。
  • 在目标中运行:在本机,或在 设置 › 构建、执行、部署 › 运行目标 中的某个运行目标里执行 PHP 和 Composer 命令。
  • 页面会显示所选 PHP 的版本和已加载的 Xdebug 版本(未加载时显示 未安装)。

语言级别

同一页面的 PHP 语言级别 决定 Intelephense 按哪个 PHP 版本检查代码(5.6 到 8.5),使用了更新版本的语法或函数会被报告。自动 读取 composer.json 的 config.platform.php,没有时取 require.php 允许的最低版本。状态栏会显示当前语言级别,点击即可切换。 该页面还有:
  • 包含路径:项目之外、也需要 Intelephense 索引的目录,例如模块所扩展的平台代码。
  • 附加存根:在默认 stub 之外额外加载的 Intelephense stub 集(例如 wordpress)。composer.json 的 require / require-dev 中每个 ext-* 会自动加入对应的 stub。

Composer

Composer 项目没有 vendor/,或已安装的包与 composer.lock 不一致时,PHP 文件和 composer.json 顶部会出现 “未安装 Composer 依赖” 横幅,提供 安装(用所配置的 PHP 执行 composer install)和 忽略。

静态分析与格式化

  • PHPStan:项目中有 vendor/bin/phpstan 时,保存的文件会交给它检查,结果显示为诊断。PHPStan › 配置文件 用于指定配置;留空则使用项目根目录下的 phpstan.neon、phpstan.neon.dist 或 phpstan.dist.neon。
  • PHP-CS-Fixer:当文件上层目录中有 .php-cs-fixer.php 或 .php-cs-fixer.dist.php,且项目有 vendor/bin/php-cs-fixer 时,重新格式化代码(⌥⌘L / Ctrl+Alt+L)改用 PHP-CS-Fixer,而不是语言服务器。

运行与测试

项目含 composer.json 或 PHPUnit 配置文件时,会自动检测:
  • composer.json 中每个脚本对应一个 composer <script> 配置(Composer 事件钩子除外);名为 test 的脚本是测试配置。
  • 存在 phpunit.xml、phpunit.xml.dist、phpunit.dist.xml,依赖了 phpunit/phpunit 或 pestphp/pest,或 vendor/bin 中有对应运行器时,生成 PHPUnit 配置(存在 vendor/bin/pest 时为 Pest)。
  • Laravel 项目中的 artisan serve。
PHPUnit 运行配置类型包含 目标、配置文件、测试过滤器 和 PHPUnit 选项 等字段。 运行上下文配置(⌃⇧R / Ctrl+Shift+F10)对 *Test.php 文件走 PHPUnit 配置,对其他 PHP 文件用所选解释器直接运行。在 *Test.php 文件以及 test/、tests/ 下的文件中,边栏图标可以单独运行某个测试类、测试方法或 Pest 测试。结果显示在测试树中,支持 重新运行失败的测试。详见测试。

调试

调试使用 PHP Debug(vscode-php-debug)配合 Xdebug。所选 PHP 必须已加载 Xdebug 扩展,PHP 设置页会显示是否已加载。
  • 调试 适用于 PHP 文件、PHPUnit/Pest 和 artisan serve。IDE 通过 -d 选项为本次会话开启 Xdebug 并使用空闲端口,不需要改 php.ini,也不会与另一个监听 9003 端口的 IDE 冲突。
  • PHP 远程调试 (Xdebug) 是一种运行配置类型,用于监听外部的 Xdebug 连接(默认端口 9003),适合调试 php-fpm、容器等其他地方处理的请求。其 远程端启动命令 字段给出对应的 php -dxdebug.mode=debug … 命令;Web 请求可使用 XDEBUG_SESSION cookie 或查询参数。用 本地根目录 和 远程根目录 做路径映射。
详见调试。

框架支持

  • Laravel:Laravel LSP 支持 config()、route()、view() 中的字符串,并提供 artisan serve 运行配置。
  • WordPress 等平台:在 附加存根 中加入对应 stub,在 包含路径 中加入平台代码目录。

已知限制

  • 不支持 Blade 或 Twig 模板,只有 .php 文件有 PHP 代码智能。
  • IDE 不会安装 phpactor。
  • PHPUnit 不支持使用覆盖率运行。
  • 调试需要 PHP 已安装 Xdebug 扩展,IDE 不负责安装。