Home » Code » 使用两周Thinkphp有感

使用两周Thinkphp有感

一年多之前刚学PHP的时候最先学的框架是Thinkphp,约有一两个月左右。后来工作却用的是基于Yii Framework的框架,对于Thinkphp就基本没触了。最近又用了两周,随便写点会什么吧——最近博客更新实在是少得有点可怜了。

开始使用难免会遇到些问题,于是找了个2000人基本满人了的群。可是却发现,我问的很多问题都没人回答或者说能回答,最终大多还是通过手册解决。那群里面问问题的远多于回答的,两周下来只发现几个偶尔还能回答一些问题的人,或许大神都是很忙的,没空搭理小白们了。绝大部分都是问一些比较低级的问题,很多文档上明文写有的啊。于是乎我得出这么一个结论:用一个新框架,时刻打开着官方的文档手册,先总体浏览一遍,做时遇到具体问题再翻外加百度谷歌一翻,90%以上的问题都能解决。很多所谓的群,其实没什么用处。^.^

不少人对于Thinkphp是带有偏见的,很主要的一个原因是:它是国产的,完全出自国人之手,注释文档全是中文的。这也能成为喷点?理论上是有点说不过去,或许也有不少崇洋媚外成分在里边。国外的月亮比较圆,国产的东西就是烂,有这样意识的人其实不在少数。Thinkphp功能十分全面,国外一些框架里边有的诸如命名空间、自动加载、活动记录、缓存等等功能都一应俱全,或许有些人会这样子,这些东西他自己不会,看国外框架也看不懂这些是怎么实现的,Thinkphp却从头到尾的都给实现了,不爽之。别说,见不得别人好、仇富心理,还是有不少人有的。

另外一个吐槽的地方就是Thinkphp的单字母大写函数。说这是什么玩意儿,26个字母都让你用完啦云云。还有的说这根本就不是面向对象啊,面向对象应不是说除了入口外都得是一个文件一个类么,怎么还有function.php这种玩意儿。这种吐槽没什么必要吧。说除了入口都得是一个文件一个类,只是一个建议,没说必须这样子啊,数据库设计还有反三范式还有冗余设计呢。写一个类里边放一堆静态方法放到一个helper/libs文件夹里边就比在Common文件夹写个function.php高大上了?写函数还比你定义类高效呢!至于用大写单字母命名函数,就更扯蛋了,你喜欢用createUrl人家用U,咋滴吧。

对于国产的东西人们应该给予更多的关注和帮助,而不是只会冷嘲热讽。差距或许有,但人家至少努力了,也在不断进步,你这嘲笑的别人键盘侠,或许水平还不如人家呢。别跟我说踢不过国足就不能骂国足~.~

Thinkphp功能全面,配置项目也有点多了,容易让人摸不着头脑,文档里面也没有将所有可配置的项目列出。最近就被这缓存的事折腾了一下。默认会缓存不少东西,即使打开了debug,配置了show trace,依然缓存一堆,做的修改看不到变化,很捉急。以下是网上搜集的一些配置项,这些都给打开,尽量减少缓存,方便开发。

'APP_DEBUG' => true,
'DB_FIELD_CACHE' => false,
'HTML_CACHE_ON' => false,
'TMPL_CACHE_ON' => false,
'ACTION_CACHE_ON' => false,
'SHOW_PAGE_TRACE' =>true,
'SHOW_ERROR_MSG' => true,

要是遇到修改了还是不变,果断的进入Runtime,Ctrl+A,Shift+Delete。

最近遇到一个因缓存导致的问题。线下一切OK,因为我经常删除Runtime,线上却出这么个问题:连贯操作插入记录生成的sql语句总是少了userid这个字段的信息,明明 已经赎值,生成的sql语句中却没有,百思不得其解。一样的代码,没有任何报错,真是日了狗了。鼓捣半天才醒悟过来,是数据库字段的问题,一开始用的user_id,后边改为userid,而线上却把数据库的字段给缓存了起来,是老的user_id,拼凑sql的时候就给把userid给忽略了。我不知道Thinkphp内部如何拼凑的,大体就是字段信息缓存的跟线上的不一样了,就出问题了!所以,没事还是得多删缓存!

对于Thinkphp的模版引擎,我是不怎么喜欢的,写上一大堆,还不如直接原生php顺手,最终也是生成成php+html混编文件执行,为何不直接就是混编呢。还有,在模板里面,是无法调用控制器里边的方法的,这点要注意。当然它可以调用php本身及框架本身的函数还有function.php里边自定义的函数。我喜欢像Yii那样直接Extract数据到视图并且使用原生php,在里边可以随意任意函数,包括控制器里边的方法。

还有,数据库连贯操作,一个方法是不能多次使用的。如添加一条记录$model->data(array(‘name’ => ‘张三’))->data(array(‘age’ => 19))->add(),前一个data就被后一个给覆盖了,略坑。

其实对于PHP框架的选择,执行效率上是没太多的区别的,本来就做些小东西,哪个简单顺手就用哪个,快速完成任务才是重点。争论哪个框架功能强大运行效率高,用一个框架来彰显逼格,其实是没有必要的。

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Time limit is exhausted. Please reload CAPTCHA.