zoukankan      html  css  js  c++  java
  • (3) IOC容器

    下面对thinkphp6与laravel7的容器做一个比较。

    首先理解下三个概念:

    IOC(控制反转)、DI(依赖注入)、IOC容器

    IOC:简单来讲,就是对类的新建、管理交由他人去处理。省去了new Class的步骤。

    DI:IOC的实现方式,逐层搜索类的依赖,并实例化。是一种递归的思想。

    IOC容器:存储DI处理过后的实例化对象。

    用生活的例子去描述:制作一张桌子。

    如果我需要张桌子去写作业,在没有机器加持情况下,只能自己动手去制作。

    首先我需要木材,找到木材后,我需要钉子,找到钉子后,我总得有锤子吧。使用这些材料与工具,我制作一张漂亮的桌子,但是耗时又费力。

    现在来了个新邻居,他是专业的木匠。我现在只需要任务交给他,他帮我实现所有的制作流程,刚好他家又大又宽,能把制作的东西暂存。

    我需要的时候才拿出来用,不需要就放那搁着,要是我想要个新桌子,就叫他帮忙重新做个。

    类似于委托,隐藏了后面的复杂实现,减少了我的工作量。

    以上就是容器的整个思想。

    下面看一下thinkphp6&laravel7是如何去实现这种思想的。

    再来理解下psr11,这个是fig组织设定的容器接口规范,目前的大部分框架有比较好的支持。

    它约定了两个方法,一个get($id) -- 从容器中获取实例化的对象,一个has($id) -- 检查是否存在于容器。另外约定了出错,抛出的exception的种类。

    不同的框架去实现了这个接口。但大家同读九年义务教育,却养育了不同性格的人,虽然大家都学习了相同的知识,但实际是两个不相干的人。

    thinkphp6与laravel7的容器本质是一样,但设计有些不一样。

    两个框架的核心是:将需要实现的类首先绑定到容器,绑定不意味着就帮你实例化了(类似登记,不干活),当你取的时候再帮你实例(赖人),容器还比较精明(给了你两个选择,1、客官留一份存根,下次无需等待,一键领取;2、要是下次还帮你新作个,要花点时间等等,但每次都是新鲜出炉),最后还给个完美的售后(告诉某个你想告诉的人,我拿了)。

    核心三个方法:bind、make、call。不同框架名字不一定一样。

    论述完基本的原理,我们深入看下thinkphp6&laravel7的模样和代码实现。

    尽量少贴代码,要不得讲很久。

    先讲一下两者的功能的区别:

    thinkphp6优势:无。

    laravel7优势:上下文绑定(特别适合参数的类型是接口,但绑定到不同的实现类),可变数量的参数绑定(一次绑定多个类),扩展绑定(适合于实例化后,再次装饰)

    下面主要分析laravel7的代码。thinkphp6的代码比较直观,可读性比较强,就一个Container类,laravel有好多个类。给我的感觉是,laravel是thinkphp的超集。

    未完待续

  • 相关阅读:
    IDEA编译Flume Sink通不过解决方法
    Hive基础之Hive体系架构&运行模式&Hive与关系型数据的区别
    Hive基础之Hive环境搭建
    Hive基础之Hive是什么以及使用场景
    pig和mysql脚本对比
    pig入门案例
    pig概述
    sqoop操作之ETL小案例
    java里面的package/import 和PHP里面的namespace/use 是一模一样的吗
    jQuery对象和DOM对象使用说明,需要的朋友可以参考下。
  • 原文地址:https://www.cnblogs.com/huachengai/p/13278111.html
Copyright © 2011-2022 走看看