.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。
⌃⇧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_SESSIONcookie 或查询参数。用 本地根目录 和 远程根目录 做路径映射。
框架支持
- Laravel:Laravel LSP 支持
config()、route()、view()中的字符串,并提供artisan serve运行配置。 - WordPress 等平台:在 附加存根 中加入对应 stub,在 包含路径 中加入平台代码目录。
已知限制
- 不支持 Blade 或 Twig 模板,只有
.php文件有 PHP 代码智能。 - IDE 不会安装 phpactor。
- PHPUnit 不支持使用覆盖率运行。
- 调试需要 PHP 已安装 Xdebug 扩展,IDE 不负责安装。