thinkphp入门

框架 framework


上传类,分页类,购物车类,数据库类
这么多实用的工具类,加在一起,是不是框架呢?
答:不是,这些只是工具包(库).


框架:是供代码运行的环境.




豆浆机,手工洗黄豆(controller,model)
豆浆机把controller,model等自动组合起来,产生作用.




开发上的好处:
1:屏蔽了平台,版本的区别.
比如PHP版本,mkdir为例,
框架mk_dir()函数已经考虑了版本的区别,可以放心调用.


linux与win的区别.
权限问题
大小写敏感问题.




2: 不用写大量的重复代码.
数据验证功能等,数据库类,分类类,等,直接调用.


3:提供很多成熟的工具(库),分页类,数据库类,文件上传类,图片处理类等等.
便于调用.


4:框架有自身的命名及代码规范,便于团队之间合作.




====为什么不用框架=====
1:框架代码多,降低了运行效率.
zendframework, 运行hello world,前后引入上百个文件.
tp也引入将近10个.


尤其是PHP作为脚本语言,不常驻内存,每次http请求,都要初始化整个框架.
带来开销.


2:web应用中,PHP的特点 快 糙,猛.
用了框架,代码拐弯多,与本身的特点相悖


3:框架本身也是有学习成本的.
使用一件工具本身是为了降低成本,
但是付出的学习如果比降低的成本还要多.


有一些框架,命名规范非常复杂,继承关系复杂,
导致开发效率降低.




=====用======
以效率而言:现在的开发观点,因为硬件发展比软件快,
运行效率第二位考虑,开发效率第一位考虑.


团队合作必不可少.




====学框架====
你学的框架本身(比如TP,zend,cake),未必能在工作中用上,
但是,框架的思想,肯定会用上.








======TP框架的引入====
入口文件里  include(/path/ThinkPHP.php);


=====url与方法调用的规律===
xx.php/xxAction类名/方法名 ---引用--> xxAction下的方法. 




以前的写法中,以用户注册为例,会写
reg.php
regOk.php


在框架中,reg.php中的业务逻辑定入 reg方法下
regOk.php中的业务逻辑,写入到regOk方法下.


这两个方法,再通过URL中的参数来调用.
这样,URL中始终只看到一个PHP文件.




这个PHP文件,就是入口文件.
这种设计方式---叫做单入口模式.






=======controller层如何写======
1:所放位置
在项目中的lib/Action目录下


2:controller的命名规范
以UserAction为例.


文件名:大驼峰写法,UserAction.class.php
类名: 大驼峰写法,和文件名保持一致.class UserAction
继承关系:最终应该继承自Action类.




3:controller的源码分析
3.1:controller在实例化时,会试图调用自身的_initialize()方法.
以用户为例,
index.php/User/xx 这个URL,
这个User/xx调用的都是UserAction的方法,
比如说我们在用户功能中,增加一个COOKIE或者SESSION检验,
这时,就可以放在_initialize()方法中进行.






========TP框架的配置====
TP框架的配置非常灵活.
ThinkPHP框架下,有convention.php,debug.php等.
这些是系统自带的配置项.
选项非常全,当我们自己写配置时,不会的配置,可以参数这个配置文件.




我们自己写的配置文件,放在哪儿? 
放在项目的conf/config.php中


项目配置比框架自身的配置优先级高.


加载配置文件的流程在
Think.class.php中的 buildApp方法中完成的.
因此,想深层了解,可以看buildApp方法.








=====上午的达标检测======
1:能否把ThinkPHP系统被几个项目所共用?


2:在项目中,配置项目的URL路由规则,改变原本的/分割URL的方式.


3:手写一个controller,
并写一个方法,及前置,后置操作.


如果能追溯源码,找到前置后置操作的工作原理更好.






=======Model的规范====
lib/Model/XyxModel.class.php , 文件名大驼峰
类名:大驼峰
方法名:小驼峰




继承自 Model类


好用的方法:
add($data),传递数组,则会自动Insert到数据库
select 查询数据,返回二维数组
find(),一般是以主键做参数,查询一行,返回一维数组.
delete(),删除,传递字符串/数值,则理解为主键值.
save(),保存数据,如果字段中有主键,则为update操作.






=====model不写,能否操作某张表=====
反向思考:model写了,又是如何操作的这张表?


以MsgModel为例,继承自Model父类
但是呢,类里面,又没写任何的方法及属性,
从这个角度看,MsgModel不写也行.




考虑,直接$model = new Model();
考虑:$model->select(),操作哪张表????


问:$msgModel = new msgModel();
$msgModel->select(),操作哪张表? 
答:msg表.  




// 关于model与表名的关系
先看trueTableName属性,如有,则其为表名
如无,则看tableName,并拿'前缀'+tableName 当表名.
如tableName也不存在,则读$this->name 当表名.
如果$this->name属性,则以类名当表名.
















































  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值