您现在的位置是:门户> web开发> ThinkPHP

TP5中Db类与Model类关系
x0ffer 2018-12-13 370人围观 0条评论
简介ThinkPHP 作为后台框架时,经常使用 Db 类操作和 Model 类继承,感觉两者密切相关

    在以 ThinkPHP 作为后台框架时,经常使用 Db 类操作和 Model 类继承,感觉两者密切相关,毕竟都是操作数据库,难道还能写两套代码?


    那它们之间是什么关系呢? 花了些时间阅读了源码,整理了一张结构图,以备遗忘。

    1153957-20170605003112680-747557554.png



    上图中,Query 查询对象地位特别重要,条条细线通Query,哈哈。


    Query 具备数据库操作的所有接口,是对 Connection 类的进一步封装和扩展,Query 支持链式操作,作为数据库中间传递对象,Db 和 Model 调用 Query 时,是通过 __call() 或者 __callStatic() 语法糖来自动触发调用的。


    Query 从设计上来说,是遵从面向对象设计原则之一的里氏替换原则,除了输出的实体数据 Connection 外,其他的外部依赖都是依赖抽象类,这种通过继承的多态性可大大提高程序的可扩展性。


    Query 在依赖外部类时,一般通过组合或直接调用来来建立依赖,而不是通过继承(也无法多重继承),可提高程序的灵活性,降低程序的臃肿度。


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


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



    --------------------- 

    作者:e62ces0iem 

    来源:CSDN 

    原文:https://blog.csdn.net/e62ces0iem/article/details/72935214 

    版权声明:本文为博主原创文章,转载请附上博文链接!


分享:

文章评论

    • wxpython 学习笔记 第一天
    • python文本数据处理学习笔记详解