php think clear --all 不会清自动加载缓存;它仅清理 runtime/ 下的 cache/、log/、temp/、route/ 等目录,而 composer 的 autoload 文件(vendor/composer/)和 thinkphp 容器缓存(runtime/container/)均不在其清理范围内。

php think clear --all 会清掉自动加载缓存吗
不会。php think clear --all 清的是 runtime/ 下的缓存目录(cache/、log/、temp/、route/),但自动加载缓存(即 Composer 的 vendor/composer/autoload_*.php 和 runtime/container/ 下的容器缓存)不在其清理范围内。
自动加载缓存分两类:
- Composer 自动加载映射文件:由
composer dump-autoload生成,存在vendor/composer/目录下 - ThinkPHP 容器编译缓存:6.x 启用
container_cache时生成的runtime/container/*.php,用于加速服务注册
这两类都不受 php think clear 管控——它压根不扫描 vendor/ 或 runtime/container/。
怎么手动清 Composer 自动加载缓存
修改了类名、命名空间或 composer.json 中的 autoload 配置后,必须重建自动加载映射,否则新类无法被识别。
执行以下命令:
composer dump-autoload -o
说明:
-
-o表示优化(optimize),生成classmap提升性能;不加则只更新 PSR-4 映射 - 如果项目用了
psr-0或自定义files加载,-o仍能覆盖它们 - TP6.1+ 若启用了
APP_DEBUG = false且配置了container_cache,仅执行此命令还不够——还需清容器缓存
怎么清 ThinkPHP 容器编译缓存(runtime/container/)
当开启 'container_cache' => true(默认 TP6.1+ 生产环境启用),框架会把服务绑定关系编译成 PHP 文件存进 runtime/container/。改了 app/provider.php 或新增服务后,旧缓存会导致服务未注册或注入失败。
清法有二:
- 直接删目录:
rm -rf runtime/container/(Linux/macOS)或手动删除该文件夹(Windows) - 用命令行封装(推荐):
php think clear:container
(需确认你项目已注册该命令;若无,可仿照ClearOldFiles自定义一个)
注意:runtime/container/ 不在 php think clear --all 范围内,也**不会**被 php think clear:cache 触及——它是独立机制。
为什么改了代码却还是加载旧类
常见于以下组合场景:
- 改了控制器类名,但没跑
composer dump-autoload -o→ Composer 找不到新类 - 启用了 opcache,且
opcache.revalidate_freq = 0→ 即使删了vendor/composer/autoload_*.php,PHP 还在用内存里缓存的老映射 - 容器缓存未清,而新服务绑定写在
app/provider.php里 → 框架启动时跳过注册,DI 失败
排查顺序建议:
先 php -v 看是否启用 opcache → 再 php --ri opcache 查 revalidate_freq 值 → 然后删 runtime/container/ → 最后 composer dump-autoload -o。
真正容易被忽略的是:容器缓存和 Composer 自动加载缓存是两套体系,不能互相替代,也不能靠一个命令全搞定。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











