小例子 理解 Laravel 中的 控制反转模式

Ioc (Inversion of Control) 控制反转模式 又称 (Depe-ndency Injection)依赖注入模式

控制反转是将组件的依赖关系从程序内部提到程序外部来管理,而依赖注入是指组件的依赖通过外部以参数或其它形式注入

下面我将以一个简单的例子来演示什么是 Ioc 控制反转

<?php

interface Visit
{
    public function go();
}

class Leg implements Visit       //行走接口
{
    public function go()
    {
        // TODO: Implement go() method.
        echo "walt to Tibet!!!";
    }
}

class Car implements Visit         //汽车接口
{
    public function go()
    {
        // TODO: Implement go() method.
        echo "drive car to Tibet!!!";
    }

}

class Train implements Visit        //火车接口
{
    public function go()
    {
        // TODO: Implement go() method.
        echo "go to Tibet by train";
    }
}

class Traveller                  // 旅行者类
{
    protected $trafficTool;

    public function __construct(Visit $trafficTool)
    {
        $this->trafficTool = $trafficTool;
    }

    public function visitTibet()
    {
        $this->trafficTool->go();
    }
}

$tra = new Traveller(new Car());

$tra->visitTibet();

Traveller 类的构造函数依赖了一个外部的具有visit接口的实例,而实例化Traveller时,我们传递了一个 $trafficTool 实例, 即通过依赖注入的方法解决依赖

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3
public function __construct(Visit $trafficTool)  

这里面的 Visit 有什么作用吗?

7年前 评论

@jalen 抱歉啊 刚刚才看到你的消息 Visit 表示的是 我们必须传入的参数是 实现了 Visit 接口的对象 就是只能传入 Leg、Car、和Train 类

7年前 评论

我可以理解为控制反转是倒置的依赖注入,由服务主动向外依赖在构造函数就依赖上需要用到的类,而依赖注入是在需要使用的函数内部进行注入,被动依赖吗

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!