PhpStorm的PHP Scratch文件点绿色三角没反应,根本原因是文件未保存或内容无可执行语句;必须Ctrl+S保存且包含顶层可执行代码(如echo、var_dump或函数调用),仅定义函数/类不会运行。

PhpStorm 的 PHP Scratch 文件能直接运行,但必须满足三个硬性条件:文件已保存、语言设为 PHP、内容含可执行语句(不能只有函数或类定义)。
Scratch 文件为什么点绿色三角没反应
常见现象是按钮灰色或点击后 Process finished with exit code 0 却无输出。根本原因就两个:
- 文件处于
unsaved状态——Scratch 新建默认不落盘,Ctrl+S保存一次才激活运行能力 - 内容不是顶层可执行代码,比如只写了
function foo() { return 42; },没调用;PHP 解释器执行时找不到入口,静默退出 - 忘了加
<?php开始标签(尤其从其他编辑器粘贴时),导致被当作文本解析
让自动补全和类型提示生效的关键操作
默认 PHP Scratch 只有语法高亮,array_ 打不出来 array_filter 补全,new DateTime() 也没方法提示。这不是功能缺失,而是上下文缺失:
- 必须手动在文件顶部加两行“占位”代码:
namespace Scratch;和class _ {} - 不能写
use App\Models\User;——use在 Scratch 中无效;要用全限定名:$u = new \App\Models\User(); - Composer 自动加载完全不生效,
new Illuminate\Support\Str()会报错;只能依赖 PHP 内置函数和已启用扩展(如json_encode、curl_init)
运行 Scratch 的实际可行路径
别指望右上角绿色三角解决所有问题。它只是调用 CLI 解释器执行当前文件,不带项目环境。真要跑带依赖的代码,得换路子:
立即学习“PHP免费学习笔记(深入)”;
- 复制代码 → 粘贴进
Tools > PHP > PHP Console:这是最接近真实项目环境的方式,自动加载vendor/autoload.php,读取.env,支持 Xdebug 断点 - 临时存到项目内
tmp/scratch_test.php→ 用Ctrl+Shift+F10运行:工作目录是项目根,require 'vendor/autoload.php'能走通,适合验证类实例化逻辑 - 用
eval()加载外部文件(仅调试):eval(file_get_contents(__DIR__.'/../src/Helper.php'));,但注意这绕过 autoloader,且有安全风险,切勿提交或长期使用
容易被忽略的路径与命名陷阱
Scratch 文件物理路径不在项目里,而是在 IDE 缓存目录下(如 $USER_HOME/.cache/JetBrains/PhpStorm2023.3/scratches/),这就带来几个隐性限制:
- 文件名不能含空格或中文——旧版 PhpStorm 执行时会因 URL 编码失败报
Command failed: php -f - 改名必须保留扩展名,比如
debug_array.php,删掉.php后缀会导致语法高亮消失、运行按钮不可用 - 右键标签页选
Move to Scratches不是“保存”,只是把它从临时标签移到Scratches虚拟目录,仍不会进 Git,也不会被composer dump-autoload扫描



















