scratch 文件是本地沙盒,非项目文件,不参与 git、composer 和 psr-4;需手动设为 php 语言、加 .php 后缀、命名无空格中文;补全需声明 namespace scratch; class _ {};运行须借 php console 或保存为临时文件;仅适用于轻量验证,不可复用或引入项目。

Scratch 文件根本不是项目文件,别把它当真实 PHP 文件用
Scratch 文件不进 Git、不参与 Composer autoloader、不被 PSR-4 扫描——它就是个本地沙盒,路径在 $USER_HOME/.cache/JetBrains/PhpStorm2023.3/scratches/,和你的项目目录完全隔离。你写 use App\Services\Logger;,IDE 直接忽略;写 function test() {} 但没调用,保存后点绿色三角也没输出,因为 PhpStorm 不会执行纯声明代码。
常见错误现象:Cannot resolve symbol 'xxx'、补全失效、new App\Services\Logger() 报错——这不是 IDE 坏了,是 Scratch 默认没上下文。它连 php.ini 都不读,Xdebug 也得靠 CLI 解释器单独启用。
- 必须手动把语言设为
PHP(右下角状态栏点语言名 → 选 PHP),否则只是纯文本 - 别指望
config/app.php或.env里的值能自动加载 - 文件名必须带
.php后缀,否则语法高亮和运行按钮消失 - 名字里别含空格或中文,旧版 PhpStorm 会因路径编码报
Command failed: php -f
怎么让 array_filter、json_encode 这类函数有补全和类型提示
默认的 PHP Scratch 只有基础高亮,没有语义分析。要触发完整补全(比如输入 array_ 弹出 array_filter),得“骗” PhpStorm 进入类上下文:
在文件开头加这两行:
namespace scratch;
class _ {}
原理很简单:PhpStorm 一看到 class 声明,就启动完整的 PHP 解析流程,包括作用域推导、内置函数签名匹配、扩展类型识别。之后写 $arr = [1,2]; array_ 就能补全,json_encode($arr) 也能显示返回类型提示。
- 不要写
function test() {}开头——没 class 包裹,补全基本瘫痪 -
use依然无效,要用全限定名:new \App\Services\Logger() - Composer 包里的类不会自动加载,类型提示只对内置函数和已启用扩展生效
真正能跑起来的三种方式,别再点右键 Run Scratch File
Scratch 文件没有原生运行按钮。所谓“运行”,全是借道其他机制:
-
最稳:复制全部内容 → 粘贴进
Tools > PHP > PHP Console。它继承项目环境:autoload、.env、Xdebug 全都有 -
最快:按
Ctrl+S保存为临时.php文件(比如桌面建tmp.php),右键 →Run 'tmp.php'。记得删,否则污染 Git -
别试:右键菜单里根本没有
Run Scratch File——这是常见幻觉,菜单项压根不存在
如果 Process finished with exit code 0 却没输出,先检查是不是漏了 echo 或 var_dump;如果报 Could not open input file,八成是文件还没保存过(新建 Scratch 默认 unsaved,运行按钮灰色)。
什么时候该用 Scratch,什么时候该停手
Scratch 适合验证正则、调试数组结构、测 mb_convert_encoding 行为、快速 dump 一段 JSON——它快、干净、不拖慢索引。但它不是测试桩,也不是逻辑中转站。
一旦你发现自己在反复复制粘贴同一段逻辑,或者开始想“能不能让项目里直接调用这个 my_util()”,说明已经越界了:
- Scratch 不能被
require或include引入项目文件(PHP 找不到那个路径) - 它不参与构建,改完关掉 IDE 再开,文件还在,但项目完全感知不到
- 真要复用,要么挪到
tests/下写正式测试,要么临时存tmp/目录再require(仅限调试)
最易被忽略的一点:Scratch 的命名空间声明 namespace scratch; 是假的——它只为激活补全,不代表你能从其他地方 use scratch\MyClass。它只是个开关,不是契约。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










