ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
THINKPHP 常见的问题 碰到问题前先看下官方的问题总结和说明:ThinkPHP5.0学习须知和常见问题集[传送门](http://www.thinkphp.cn/topic/38624.html) 目前最佳的V5教程是官方的 《 [ThinkPHP5.0快速入门](http://www.kancloud.cn/thinkphp/thinkphp5_quickstart) 》 **首先不要带着3.2版本的思维习惯和定式来理解和使用TP5 ,TP5是一个全新的颠覆重构版本,跨版本发布是经过深思熟虑的结果,不是闹着玩的,在很多方面TP5对原有的开发模式进行了颠覆,这其中最大的莫过于对模型和数据库的重构了。从某种意义上来说,如果你不彻底理解5.0的模型用法,那么你将无法正确掌握TP5,就算是你把老项目迁移到5.0上,也不代表你理解5.0的心。 ** **重要说明:想要学习和掌握TP5,必先掌握两个知识:对象和命名空间、对象和命名空间、对象和命名空间,重要事情说三遍。如果你还没有掌握这两个,TP5估计与你无缘了** 原有的老版本开发的项目将很难升级到5.0版本,至少从5.0RC3版本开始,这一问题显得非常的越来越明显,如果你试图这么做,那么请确保你有足够的能力,因为不要指望官方会浪费时间在老版本的兼容和升级上来,我们已经下决心彻底放弃兼容升级的可能,并重新评估哪些方面的不良习惯是需要纠正的。  **如果你有发现问题,请使用最新版本的github版本测试是否依然还有问题,同时官方对反馈问题的修正只是表明我们在github版本库上已经进行了修正,并不代表下载包会及时更新。同时在线完全开发手册也是针对最新的版本库进行同步更新,如发现用法不符,请及时更新到最新的框架版本** 下面是作为一个新手(我们姑且称之为新手吧~)经常会问到的问题列表,稍加整理,以后会增补:  (更多的常见问题请参考:[ThinkPHP5.0快速入门](http://www.kancloud.cn/thinkphp/thinkphp5_quickstart) ->附录->常见问题集) * **关于老版本升级。tp5改动太大,非实力派和精力派不推荐老版本系统升级。** 1. ### 单字母函数问题 单字母函数目前已被助手函数替换了。从官方的解释来说,单字母函数已经是时候功成身退了。整个thinkphp5框架进行了重构之后,核心框架不再依赖单字母函数。所以单字母函数消失了。不过可以自行恢复过来,不过推荐尽量不要用了,这个单字母函数一直褒贬不一。尽量看看主流的框架使用吧。  解决方式: * 使用助手函数来完成单字母函数。 在助手函数里面处理 可以改为单字母函数 参考官方thinkphp5完全开发的文档 * [http://www.kancloud.cn/manual/thinkphp5/144731](http://www.kancloud.cn/manual/thinkphp5/144731) 2. ### URL访问出错 可能出现问题的原因,THINKPHP5所有访问均使用pathinfo模式。如果不支持PATHINFO的服务器可以使用兼容模式访问如下: > [http://serverName/应用入口文件?s=/模块/控制器/操作/[参数名/参数值...](http://servername/%E5%BA%94%E7%94%A8%E5%85%A5%E5%8F%A3%E6%96%87%E4%BB%B6?s=/%E6%A8%A1%E5%9D%97/%E6%8E%A7%E5%88%B6%E5%99%A8/%E6%93%8D%E4%BD%9C/[%E5%8F%82%E6%95%B0%E5%90%8D/%E5%8F%82%E6%95%B0%E5%80%BC...)] 3. ### 部分模板常量不再存在如`__ROOT__`、`__APP__`、`__SELF__`等 解决方案:自己在config.php 上增加 例如: ~~~ if (!IS_CLI) { // 当前文件名 if (!defined('_PHP_FILE_')) { if (IS_CGI) { //CGI/FASTCGI模式下 $_temp = explode('.php', $_SERVER['PHP_SELF']); define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'], '', $_temp[0] . '.php'), '/')); } else { define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'], '/')); } } if (!defined('__ROOT__')) { $_root = rtrim(dirname(_PHP_FILE_), '/'); define('__ROOT__', (($_root == '/' || $_root == '\\') ? '' : $_root)); } define('PHP_FILE', _PHP_FILE_); } if(!defined('__APP__')) define('__APP__', strip_tags(PHP_FILE)); // URL常量 if(!defined('__SELF__')) define('__SELF__', strip_tags($_SERVER[C('URL_REQUEST_URI')])); ~~~ 参考文档:THINKPHP5简明开发文档 [http://www.kancloud.cn/thinkphp/thinkphp5-guide/90317](http://www.kancloud.cn/thinkphp/thinkphp5-guide/90317) 4. ### 视图问题 TP5使用return返回。对API友好,但对视图不友好。所以this->display();这种是不可以的; 解决方法:视图继承think/controller;然后return $this->fetch(); 未继承think/controller后,return view('index/hello'); 5. ### 模型改动 M函数已取消,进行数据查询时不用实例化了, > 所有的查询都是静态方法实现的如: > Db::table('think_user')->select(); > 如果省略表前缀可以使用  > Db::name('user')->select(); 6. ### 安装问题 thinkphp5支持composer安装。作为一个phper,个人觉得非常有必要学习一下composer。 传送门:[composer备忘录](http://www.kancloud.cn/iwzh/wzhquestion/132015)