TP6仅支持app/common.php和Composer自动加载的app/helper.php两个函数入口;前者在框架启动早期加载,后者需在composer.json中配置并执行dump-autoload;模板中调用须用|语法且参数顺序固定;禁止与系统函数同名,迁移时需重命名路径并清除function_exists包裹。

TP6 只认 app/common.php 这一个自动加载入口
TP6 不再扫描 Common 目录,也不支持 Common/common.php 或 app/Common/common.php 这类路径。函数要全局可用,必须严格放在 app/common.php(注意是小写 app,不是 App,且无子目录)。这个文件在框架启动早期就被 require_once,所以里面定义的函数在整个请求生命周期内都可直接调用。
常见错误现象:Call to undefined function format_time(),往往是因为文件放错位置,比如误建为 app/Common/common.php 或 common.php 在根目录下。
- 不要加
if (!function_exists('xxx'))包裹——该文件只加载一次,重复定义风险为零 - 禁止在函数里写
return、exit、die等中断语句,否则整个 HTTP 响应会提前终止 - 示例函数必须返回值,不能修改入参(尤其不能用
&$var引用传参):function format_time($ts) { return date('Y-m-d H:i', (int)$ts); }
模板中调用自定义函数必须走 | 语法,且参数顺序固定
ThinkPHP 模板引擎不支持 <?php echo format_time($time); ?> 这种写法,也不接受命名参数或跳过中间参数。所有自定义函数调用必须用管道符 |,并用 ### 占位原变量位置。
常见错误现象:模板里写 {$time|format_time} 没反应,或报 Undefined variable;其实是因为函数签名和调用格式不匹配。
立即学习“PHP免费学习笔记(深入)”;
- 单参数函数:直接写
{$time|format_time} - 多参数函数:必须按顺序传,
###表示原变量插入点,例如:{$text|truncate=20,###,'…'}对应function truncate($str, $len, $suffix) - 函数体内不能使用
$this、不能依赖容器实例(如app()或db()),模板渲染时无上下文对象 - 函数必须有返回值,返回
null或void会导致渲染为空字符串,且无任何提示
app/helper.php 需手动注册到 Composer autoload 才生效
TP6 的 helper.php 不是“放哪都行”,它默认不被自动加载。必须确保它被声明在 composer.json 的 "autoload": {"files": []} 里,且路径为 app/helper.php(不是 app/extend/helper.php 或其他)。
常见错误现象:函数在控制器里能用,在命令行(CLI)或队列任务里却报 undefined function——因为 composer dump-autoload 没执行,或配置没生效。
- 检查
composer.json是否包含:"autoload": { "files": ["app/helper.php"] } - 改完后必须运行
composer dump-autoload,否则不会注册 - 避免与系统函数同名:TP6 自带
success()、abort(),若你在app/helper.php里也定义了success(),会直接触发Fatal error: Cannot redeclare success() - 推荐统一加前缀,如
my_format_price()、my_log_debug(),迁移老项目时可用function_exists()做兼容判断
TP3.x 和 TP6 的加载机制完全不兼容,不能混用
TP3.x 默认加载 Common/common.php,扩展函数靠 LOAD_EXT_FILE 配置;TP6 彻底废弃这套逻辑,只认 app/common.php 和 Composer autoload 的 app/helper.php。硬套 TP3 的写法到 TP6,99% 会报错。
容易被忽略的关键点:TP3 的模板函数可以写 import('@.helper') 局部引入,但 TP6 没这机制;TP3 允许 Common/fc.php 这类多文件管理,TP6 一律拒绝——所有全局函数只能挤进 app/common.php 一个文件,或走 Composer autoload 路线。
- TP3 的
Conf/config.php中'LOAD_EXT_FILE' => 'fc,helper'在 TP6 中完全无效 - TP3 的
import('@.one')写法在 TP6 里会报Class not found,因为 TP6 已移除import函数 - 从 TP5.1 迁移到 TP6 时,旧的
application/common.php必须剪切重命名为app/common.php,并清理所有if (!function_exists())包裹
Call to undefined function 就会准时出现。



















