thinkphp自定义函数需按版本规范:tp6仅支持app/common.php全局加载,函数须有返回值、禁用中断语句;tp3.x通过load_ext_file配置多文件,模板中必须用|管道语法调用,如{$time|format_time}。

ThinkPHP 自定义函数不是“随便写个文件就能用”,关键在于版本、位置和调用方式。TP6 和 TP3.x 完全不同,混用会直接报 Call to undefined function。下面按实际开发中最常遇到的场景,说清楚怎么创建、放哪、怎么调、怎么在模板里用。
TP6:只认 app/common.php 这一个入口
TP6 不再扫描 Common 目录,也不支持 app/Common/common.php 或 Common/common.php。唯一自动加载的全局函数文件是:
-
路径必须是
app/common.php(小写 app,无子目录,文件名小写) - 该文件在框架启动早期就被
require_once,定义的函数全程可用 - 不要加
if (!function_exists('xxx'))包裹——它只加载一次,不会重复定义 - 函数体内禁止
return、exit、die等中断语句,否则整个请求会提前终止 - 函数必须有返回值;不能修改入参(尤其不能用
&$var引用传参)
示例:
function format_time($ts) {
return date('Y-m-d H:i', (int)$ts);
}
控制器中可直接调用:format_time(time())。
TP3.x:靠配置加载多个函数文件
TP3 默认加载 Common/common.php,但其他函数文件需手动配置引入:
- 在
Conf/config.php中设置:'LOAD_EXT_FILE' => 'helper,utils' - 系统会自动加载
Common/helper.php和Common/utils.php - 每个扩展文件里仍需自己加
if (!function_exists('xxx')),因为模块级 Common 可能被多次包含 - 不建议把所有函数塞进一个大文件——调试难、热更新慢、易冲突
模板中调用:必须用 | 管道语法
ThinkPHP 模板引擎不支持 <?php echo format_time($time); ?>,也不接受命名参数或跳过参数。所有自定义函数调用都得走修饰器语法:
- 单参数函数:写成
{$time|format_time} - 多参数函数:用
###占位原变量位置,例如{$text|truncate=20,###,'…'}对应function truncate($str, $len, $suffix) - 函数签名必须匹配:参数顺序固定,不能有引用形参,必须返回值
- 函数内不能使用
$this或容器实例(如app()、db()),模板渲染时无上下文对象
需要在 {:func()} 中用?得注册模板函数
如果想在模板里写 {:format_time($time)} 这种写法,TP6 要求显式注册:
- 打开
app/provider.php - 在
think emplatedriverThink配置中添加:'format_time' => 'format_time'(全局函数)或'format_time' => 'app\helper::formatTime'(静态方法) - 未注册就调用会报错:
Template Error: function not exists - 注册的函数也必须有返回值、不依赖运行时上下文
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











