数据库的介绍就讲这些,我们再回过头来看TP框架的目录结构:
“extend”扩展类库目录;
“vendor”第三方类库目录;
这两个目录也是让我们写代码用的,其实楠神不太喜欢把这两个目录放在application目录外面,放到目录里更合适。
在application目录新建这两个文件夹:
说下这两个目录的作用:
extend目录:扩展类库
业务逻辑代码多数写在控制器中,假如某些业务逻辑很复杂很核心,涉及修改多张表,并在多个控制器中都会用到,那我们怎么去写代码呢?
我们肯定不能把同样的代码在多个控制器都写一遍!绝对不能犯“重复造车轮”的错误。必须把代码打包成函数或类的方法。
有三种方法可去解决这个问题。
第一种方法:把一些核心代码写成函数,在控制器逻辑代码中调用。但这样也不是特别好。核心的功能,往往不是一个函数就能完成的,或者逻辑代码太长时不应该把代码全写到一个函数里。应该使用多个函数一块完成一个功能。为了突显多个函数是一个整体,写成函数不如定义成一个类的多个方法。
第二种方法:把一些核心代码定义到一个类中,这个类可以是某些控制器类的父类,然后再由这个类去继承controller类。这种方法楠神也不喜欢,就怕在类中定义的方法太多,不小心重写了controller类的方法,或者被子类重写了方法。
第三种方法:把一些核心代码定义为扩展类,写到扩展类库中。举个例子:
楠神开发过P2P项目,代码逻辑很复杂的。根据项目的几大类功能,楠神分别写了如下几个扩展类
借款类、金额类、还款类、债权转让类、用户积分类……
每个类都有一千多行代码,二三十个方法。在每个控制器方法中,有需要哪种业务逻辑,就调用对应的扩展类方法即可。楠神这样做会让自己一直保持整个网站的逻辑清晰,不至于代码写得乱七八糟。借款出问题了或需求改变了,我直接就去借款类中解决问题;还款出问题了或需求改变了,就去还款类中找问题……
不写扩展类,而使用函数,不好处就是不方便对某一类功能的函数做归类。
理论的东西就说这些,深刻的理解还需有着丰富的编程经验才可。实际开发中,需不需要写扩展类,根据个人喜好以及项目复杂度而定。如果一个项目功能都简单,表与表之间的逻辑关系没那么复杂,所有的逻辑代码在控制器中写就好了。
vendor目录:第三方类库
这个好理解。假如一个项目要实现微信登录,那需要和微信接口做对接。微信会提供一份API代码(确切的说是一个类),使用它提供的代码与我们的项目做整合,这样才可以实现想要的功能。微信提供的代码我们基本上是不需要修改的,它的代码我们应该把它放到第三方类库中。
其实我们开发项目,有很多功能不需要自己写的。比如程序自动发email、数据excel导出、PDF文件生成……网上都有现成的类库,我们直接拿来放到第三方类库中使用即可。
说了这么多,在控制器中怎么能够调用扩展类实例对象的方法呢?下面是楠神定义的两个函数:
单例化扩展类对象的函数
测试下这个函数
这Test类是个扩展类,(扩展类也要加个命名空间)。
在home模块下控制器Test类的方法中调用:
OK!成功调用到Test扩展类了,说明楠神的函数起作用了。
单例化第三方类对象的函数
e_vendor与e_extend代码稍微有所不同,说明下:
前面楠神讲到,一个类文件最好用“class.php”做后缀,大家也看到了,TP框架把“class”去掉了,但很多第三方类还是以“class.php”做后缀的。
第三方类大多都是没有命名空间的类。
e_vendor不做演示了。