thinkphp学习总结

本文分享了作者在15天内独立完成一个拥有19个模块的办公自动化(OA)系统的经历,采用ThinkPHP框架并结合个人项目管理心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       之前要做一个普通的OA系统,不想再用我用过的技术,比如jsp,.net或者rails,于是决定用php。但是mvc的模式我一直都是很认可的。于是去找支持mvc的php框架,找出了一大堆出来。认真看了各种框架的官网和相关资料后,决定用thinkphp去做。原因如下:1。国产的(虽然说国产的框架一直给我感觉不是很完善,但是这个框架已经发展了6年)2。拥有很多我一直想实现但是没有实现的特性。3。有详细的官方资料,虽然论坛很冷清,但是那个学习手册基本涵盖了框架里的所有内容,实在不懂,还可以看源码。于是从2012年3月12日到18日,确定功能需求和设计数据库,搭建好框架,包括界面模型,并且简单了学习了php的语法和框架的使用。接下来逼自己一个星期内必须完成一个19个模块的oa系统了。因为还要写自己的论文,没那么多时间开发。于是紧张的开发开始了。。每天基本都是醒来吃了早餐或者没吃早餐就做,早上,下午,晚上都在做。一开始的第一两天,很多问题,花了一天多的时间才完成一个模块最基本的增删查改。后来上手了,速度就加快了,一般一天能完成2-3个模块。第六天的是时候只剩两个模块了,邮件和日志模块。邮件认真看了资料后,感觉不是那么能做出来,所以先停着,设计完所有模块的日志记录格式和规范并且完成后,刚好第七天,再花了两天时间去完善项目里关于安全方面的非功能性需求,比如:

     1.设置过滤器使得session过期或者失效时(或者没有登录系统而直接访问里面的模块)或者直接访问里面不存在的模块和方法时,直接退回登录界面。

     2.利用thinkphp框架的表单令牌去避免所有模块的重复刷新或者后退提交等功能。

    3.设置目录访问权限设置,利用.htaccess文件。

    4.设置保护模板文件(默认不允许直接访问tpl里的html文件)       

      到3月27日,开发结束。总结一下,3月12日到3月27日,刚好15天,一个人完成了以下的工作:需求确定、设计数据库、搭建框架,设计界面模型,具体开发、完善代码和完成一些安全性的要求。效率应该还是可以的。不过就把自己有点累坏的感觉了,况且之前还连续开发了3个月的项目。之前体检都心跳过快了,所以接下来要好好休息一下了。

    下面谈谈开发的感受和总结:

     做项目的时候,虽然用php才开发了一两天,但是就已经开始有喜欢php的感觉了,也感受到php和java之间的利弊了。php之前没有对象的概念,后来的版本才有。之所以不用引用对象的概念,因为已经库里面包含了大量的能想得到的函数,直接调用即可,无需再引入对象的概念。也能解决很多java一直很头痛的问题,比如空指针异常,做java的时候,最要小心的地方就是空指针异常,写了n多的if判断或者try catch和其他处理很多都是为了避免这种情况。但是php和其他脚本语言一样,无需定义即可使用,所以不会有这种异常,只会抛出警告而已。但是也正是因为这种方便,可能会导致引入对象的概念后,变量名还是一样,但是实际所属的类已经发生了变化,有可能会引发一些很难以察觉的错误。而java严格验证所有的类关系和是否初始化,对于代码的严谨性就会有很大的帮助。

       说了一大堆,再讲讲用thinkphp的感受,感觉它融合了很多值得借鉴的技术,这也是我国it公司最喜欢做的事情,引入别人的技术再加以集成和封装,说的不好听的,就是没有自己的创新。但是做工程的话,就是需要不断的去引入优秀的地方加以集成,这样项目才会变得越来越完善。而且对于任何一门技术的新手,刚写出来的的代码一定不够完善或者考虑不细致,而框架一般都是总结了很多经验之后才累积下来的。所以通过框架去快速学习这门技术常见的问题和技术难点是很有帮助的。

    下面列出了开发完项目后总结的关于thinkphp要注意的问题:

1.开发当中必然要引用很多外部文件,比如图片脚本css等,和java里面的${ctx}等价的是__APP__,必须要加,
  不然会找不到文件。
2.遍历返回的resultset时,例如   
 <foreach name="_SESSION['sysfunction']" item="function"> 
   可以这样写alert({$function.ID}); //还可以alert({$function['ID']}); 这样写,但是切记必须大写,因为数据库存储的key默认是大写(如果手动写sql语句把它as **的除外),要  唯 一对应的。。。
4.include用法切记要加./而不是__APP__ ,例如 <include file="./Common/meta.html"/>
5.切记在foreach和if标签里的写法,对于变量,foreach不用写$,if要写$....
6.慎用getField方法(因为和常见的思维有点不一样),多用$user.ID或者$user[ID]去获取
8.如果新增或修改页面想用预绑定来生成对象,控件的名字必须写成和数据库的字段名一样,且全部大写!原因和第二点一样。
9.用$object->create()方法产生的是对象,要用$object->id去访问,用$object->find($id)去产生的也是对象,要用$object->id去访问。但是如果左边再赋值一个变量,那个变量就不是一个对象,而是一个数组,这个概念刚开始开发的时候经常混淆。
10.切记thinkphp无法替换javascript脚本里的__APP__, 如果要用到自己定义一个 var ctx='projectname';
11:对象修改数据的两种访问方式:
   第一种:
       $user=M('User');
      $user->find($_SESSION['loginUserId']);
      $user->YYKJ=$user->YYKJ+$size;
      $user->save();
   第二种:
      $user=M('User');
      $newmodel=$user->find($_SESSION['loginUserId']);
      $newmodel[YYKJ]=$newmodel[YYKJ]+$size;
      $user->save($newmodel);

12.对于filesize,rename,unlink,file_exists,readfile等文件操作的方法,对于中文名,必须加上
   类似iconv("UTF-8","gb2312",$filename.$file->WJM)的转换,不然函数会出错,不生效,因为项目里所有文件的编码是utf-8,而系统的编码默认是gb2312的。
13.thinkphp的表单令牌不会在缓存文件里面就替换,在客户端的页面的源代码里面才能看到框架添加的表单隐藏字段__hash__。
14.对于find方法,官方文档有一个地方没有说明,导致有一个小问题令我百思不得其解了一会。
   $user->find($id); 这条语句如果能够找到主键为id的记录,则返回改记录,如果没有找到,默认返回表里符合条件的第一条记录!!而不是返回false或者空对象。应该算是个bug。

      研究生三年,研一基本算是玩了一年,从研一暑假开始,就开始不断的做项目了。做完一个又一个,和其他组员给导师做了4个web项目,数据交换平台,实验动物平台,智能表单系统,香港免试生报名录取系统,这4个系统都是都用了jsp技术,第1个和第3个用springside3框架,第二个用普通的ssh框架,第四个用springmvc+mybatis框架。给自己做了3个系统,教务管理系统,在线考试系统,办公自动化系统, 分别用到了ASP.NET MVC第二版框架,ruby on rails框架和thinkphp框架。为什么这么喜欢用框架呢?因为一直以来都有这样的理想,以后不再需要编程人员,只需要设计人员,设计好之后,就像搭积木组合起来,一个新项目就完成了。这也是大学的时候,听老师说的印象最深的一句话。而实现这样的东东,必然会需要不断的抽象,提取公共的东西,降低耦合,使之更重用。框架也就是这样来的。

    好了,第一次写了那么多东东,算是对研究生阶段的总结了。该吃饭了。。微笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值