ThinkPHP5中Db类与Model类关系

此文章发布于35个月前,部分信息可能已经过时,请自行斟酌确认

ThinkPHP5中Db类与Model类关系

在ThinkPHP中我们经常使用 Db 类操作和 Model 类继承,两者都能实现想要的数据库操作,那么一直有个问题困扰着我,他们两者差距到底是什么呢?实际使用起来,谁的理论操作速度更快呢?带着这两个问题,我去度娘找到了相对满意的答案,这里分享给大家!


这里先看一张TP源码的结构图:
TPModel结构图.png

可以看到图中Query查询对象地位特别重要,条条大路通Query!

  • Query 具备数据库操作的所有接口,是对 Connection 类的进一步封装和扩展,Query 支持链式操作,作为数据库中间传递对象,Db 和 Model 调用 Query 时,是通过 __call() 或者 __callStatic() 语法糖来自动触发调用的。
  • Query 从设计上来说,是遵从面向对象设计原则之一的里氏替换原则,除了输出的实体数据 Connection 外,其他的外部依赖都是依赖抽象类,这种通过继承的多态性可大大提高程序的可扩展性。
  • Query 在依赖外部类时,一般通过组合或直接调用来来建立依赖,而不是通过继承(也无法多重继承),可提高程序的灵活性,降低程序的臃肿度。

可以看到 Db 类是数据库操作的入口类,我们几乎没有直接操作过 Query 类。Db 类应用了对象关系映射(ORM)的设计方法,可以很方便的使用提供的接口,某种程度上因解析原因会稍微降低一些性能,不过你也可以用最原始的语句查询,并没有强制。

因为 Model 是一个抽象类,所以在使用时需要先继承一下。支持关系操作(Relation)。


最后总结:综上所述,Db类理论操作速度是要比Model要快滴!

参考链接:华子程序

最后修改:2020 年 10 月 29 日 11 : 59 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论