tp6不再自动加载_common.php,需在app/bootstrap.php中手动require_once引入;tp5则通过common_path控制function.php加载,不可修改框架源码。

ThinkPHP 6 的 _common.php 不再自动加载,必须手动引入
TP6 彻底移除了框架级的全局函数自动加载机制,_common.php(或任意命名的公共函数文件)不会像 TP5 那样在初始化时被自动 require。这不是“顺序问题”,而是“根本没走这个流程”。如果你还在 TP6 里放一个 app/common.php 或 thinkphp/library/think/_common.php 并指望它自动生效,那函数调用时会直接报 Call to undefined function。
实操建议:
- 把自定义函数统一放到
app/common.php(路径可自定,但需手动加载) - 在
app/bootstrap.php中顶部位置写:require_once __DIR__ . '/common.php';
(注意是bootstrap.php,不是provider.php或event.php) - 确保该文件中只定义函数,不执行逻辑、不依赖容器、不调用
app()等运行时对象 - 如果用了 Swoole 或 RoadRunner 等常驻内存模式,
bootstrap.php只执行一次,函数定义会持久化——这点和传统 FPM 不同,别在里面写动态初始化代码
TP5.1/TP5.0 中修改 _common.php 加载时机:改 thinkphp/base.php 不现实,应改入口或配置
TP5 默认在 thinkphp/base.php 末尾硬编码了 include COMMON_PATH.'function.php'(注意不是 _common.php,默认名是 function.php)。你想换文件名或改路径,不能动框架源码,否则升级必崩。
实操建议:
- 在应用入口文件(如
public/index.php)中,在require '../thinkphp/start.php'之前,先define('COMMON_PATH', __DIR__.'/../app/common/');(路径按需调整) - 确保你的真实函数文件放在该路径下,且命名为
function.php;若坚持用_common.php,则需在base.php后手动补加载:require COMMON_PATH . '_common.php';
- 不要试图通过
Loader::addNamespace()或Loader::addPsr4()注册函数——它们只管类,不管函数 - TP5 的
COMMON_PATH是唯一可控入口点,改它比 patch 框架文件安全得多
函数重复定义导致的 Fatal error:常见于多环境或热重载场景
当多个地方都 require 同一个函数文件(比如 bootstrap.php + 入口文件 + 某个 service 类里又 require 了一次),PHP 会抛出 Fatal error: Cannot redeclare xxx()。这在使用 Swoole reload、Hyperf-style 热更新、或某些 IDE 自动预加载时特别容易发生。
实操建议:
- 所有函数文件开头加防御性判断:
if (!function_exists('your_function_name')) { function your_function_name() { ... } } - 避免在类方法、中间件、控制器里
require函数文件——这些地方可能被多次执行;只在启动阶段一次性加载 - 如果用 Composer autoload,可以把函数封装成静态方法,放进一个类里,再用
class_exists()控制加载,比裸函数更可控 - TP6+Composer 方式推荐:把函数打包为独立包,用
"autoload": {"files": ["src/functions.php"]}声明,由 Composer 统一管理加载时机
为什么别碰 thinkphp/library/think/_common.php?
这个路径在官方源码里根本不存在。TP5 的默认函数文件是 thinkphp/library/think/function.php(含 dump()、is_null() 等辅助函数),TP6 已全部移入 helper 包或废弃。你看到的 _common.php 几乎全是项目私有文件,混进框架目录会导致升级失败、Git 冲突、CI 构建异常。
实操建议:
- 删掉
thinkphp/library/think/_common.php(如果真存在)——它从来就不属于框架 - 所有业务函数必须放在
app/下,路径清晰、版本可控、团队协作无歧义 - 框架升级前跑一遍
git status,重点检查是否误改了thinkphp/目录下的任何文件
require,其他地方只用,不载。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










