龙空技术网

ThinkPHP5.0的数据库架构设计

行家汇 306

前言:

现在大家对“thinkphp5框架原理”大体比较重视,我们都想要剖析一些“thinkphp5框架原理”的相关资讯。那么小编同时在网摘上网罗了一些有关“thinkphp5框架原理””的相关知识,希望同学们能喜欢,大家快快来学习一下吧!

使用框架开发应用,一般不需要直接操作数据库,而是通过框架封装好的数据库中间层对数据库进行操作。这样的好处主要有两个:一是简化数据库操作,二是做到跨数据库的一致性。这种设计的中间层通常称之为数据库访问抽象层,简称数据访问层(DAL),ThinkPHP5的数据访问层是基于PHP内置的PDO对象实现。一般抽象层本身并不直接操作数据库,而是通过驱动来实现具体的数据库操作。ThinkPHP5.0的数据库设计相比之前版本更加合理,数据访问层划分的更细化,把数据访问对象分成了连接器、查询器、生成器等多个对象,并通过数据库访问入口类统一调用,分工更明确,各司其职,欲知详情且听我慢慢道来。ThinkPHP数据访问层设计示意图:

平常我们的数据库操作使用的类库一般都是数据库的入口类think\Db。这个类非常的简单,主要就是一个connect方法,根据数据库配置参数连接数据库(注意这里的连接并非真正的连接数据库,只是做好了随时连接的准备工作,只有在实际查询的时候才会真正去连接数据库,是一种惰性连接)并获取到数据库连接对象的实例。Db类都是静态方法调用,但看起来这个类啥都没实现,那是怎么操作数据库的呢,其实就是封装了数据库操作方法的静态调用(利用__callStatic方法),下面是代码实现:

// 调用驱动类的方法

public static function __callStatic($method, $params)

{

// 自动初始化数据库

return call_user_func_array([self::connect(), $method], $params);

}

理论上来说,框架并不依赖Db类,该类的存在只是为了简化数据库抽象层的操作而提供的一个工厂类,否则你就需要单独实例化不同的数据库连接类。因此,看似可有可无的Db类就成了数据访问层实现的点睛之笔了^_^。所有的数据库操作都是经过Db类调用,并且Db类是一个静态类,但Db类自身只有一个公共方法connect。

标签: #thinkphp5框架原理