在使用TP5框架的时候出现了如下的异常:
Uncaught Error: Call to undefined function lang() in framework/tpl/think_exception.tpl:82
这个异常的大概意思是在framework/tpl/think_exception.tpl这个文件中的lang()是一个未定义函数。而think_exception.tpl就是tp用来显示异常的试图模板。那为什么会报这个错误呢?我在trace中查看了文件加载的顺序,是这样的:
因为框架设计的加载顺序是: E:\mrwei\thinkfive\application\config.php ( 8.55 KB ) E:\mrwei\thinkfive\application\database.php ( 1.87 KB ) E:\mrwei\thinkfive\thinkphp\library\think\Hook.php ( 4.63 KB ) E:\mrwei\thinkfive\application\tags.php ( 0.96 KB ) E:\mrwei\thinkfive\application\common.php ( 0.60 KB ) E:\mrwei\thinkfive\thinkphp\library\think\Env.php ( 1.05 KB ) E:\mrwei\thinkfive\thinkphp\helper.php ( 17.22 KB ) E:\mrwei\thinkfive\thinkphp\library\think\Lang.php ( 6.72 KB ) E:\mrwei\thinkfive\thinkphp\library\think\Log.php ( 5.51 KB ) E:\mrwei\thinkfive\thinkphp\lang\zh-cn.php ( 3.78 KB )
也就是application的config.php是在Lang.php之前载入的,如果config.php中有错误的话错误处理模板中的lang('xxx')函数会提示找不到lang()方法。
所以如果你的配置文件中出现错误就会报这样的错误。这个按照设计思路来讲我认为是thinkphp5框架设计的缺陷,针对这个问题我在GitHub上向thinkPHP的开发组中提交了问题issue,但是也没有得到回复,希望在后续的thinkPHP5框架小版本中能够合理的修复这个问题。