Scratch文件不算项目正式代码,因其不参与构建、不受版本控制、不在项目目录下且无法被require引入。

Scratch文件到底算不算项目里的正式代码
Scratch文件不参与构建、不被版本控制跟踪、也不会出现在项目索引里——它就是个纯本地沙盒。你新建一个 PHP Scratch,写完 echo "hello";,关掉IDE再打开,文件还在;但用 git status 看不到它,composer dump-autoload 也完全无视它。
- 它存在路径是
$USER_HOME/.cache/JetBrains/PhpStorm2023.3/scratches/(Windows/macOS/Linux 路径不同,但都不在项目目录下) - 不能被
require或include引入到项目真实文件中——PHP 找不到这个路径 - 类型推导、自动补全照常工作,因为 PhpStorm 仍按 PHP 语法解析它,但它没有所属命名空间上下文
怎么快速创建并重命名Scratch文件
别去菜单栏点「File → New → Scratch File」——太慢。直接按快捷键:Ctrl+Alt+Shift+Insert(Windows/Linux)或 Cmd+Option+Shift+Insert(macOS),弹出小窗选 PHP 就行。默认名是 scratch.php,但立刻按 F2 改名,比如改成 debug_array_walk.php。
- 改名后扩展名必须保留,
.php不能删,否则语法高亮和运行按钮会消失 - 名字里别带空格或中文,某些旧版 PhpStorm 在执行时会因路径编码问题报
Command failed: php -f ... - 右键文件标签页选「Move to Scratches」可把它从临时区“升格”为常驻 Scratch(仍不进 Git)
为什么点绿色三角运行没反应或报错
Scratch 文件默认用当前项目配置的 PHP 解释器运行,但有两个关键前提:文件得保存过(哪怕只 Ctrl+S 一次),且内容得是合法 PHP 顶层代码(不能只有函数定义或 class 声明而没调用)。
- 常见错误现象:
Process finished with exit code 0却没输出 → 检查是不是忘了echo或var_dump,或者写了return后直接结束脚本 - 如果报
Could not open input file→ 多半是文件还没保存(Scratch 初建是 unsaved 状态,运行按钮灰色,点不了;一旦保存,按钮变绿) - 想用 Xdebug 断点?可以,但必须确保该 Scratch 文件已保存,且 PHP CLI 解释器启用了 Xdebug(
php -m | grep xdebug验证)
Scratch 和普通 PHP 文件混用时要注意什么
你可以把 Scratch 当“实验台”,但千万别把它当“测试桩”。比如你在 scratch.php 里写了个 function my_util() { ... },然后想在项目里 my_util() ——这行不通。
立即学习“PHP免费学习笔记(深入)”;
- Scratch 文件不会被自动加载,
autoload.php不管它,PSR-4 规则也不覆盖它 - 如果真需要复用逻辑,要么复制粘贴到
tests/下的正式测试文件,要么用eval()(不推荐)、或临时写进tmp/目录再require(仅调试) - 注意 IDE 缓存:改了项目里的类,Scratch 中调用可能还显示旧方法签名——不是 bug,是 PhpStorm 没主动刷新跨文件依赖,重启索引(
File → Reload project from Disk)能缓解
Scratch 的边界很清晰:它只属于你当前这台机器、当前这个 PhpStorm 实例。共享、协作、持续集成——这些场景里它天然缺席。用得好是利器,当成正式模块就容易半夜排查“为什么别人跑不通”。

















