TP5.1 容器+依赖注入

1.在公共模块中创建一个Temp类

<?php
namespace app\common;

class Temp
{

    private $name;
    public function __construct($name = 'Perter')
    {
        $this->name = $name;
    }
    public function setName($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return '方法是:' . __METHOD__ . '属性是' . $this->name;
    }
}

2.在创建一个案例控制器类,便于url测试访问

<?php
namespace app\index\controller;

/**
 * 容器与依赖注入的原理
 * 1.任何的url访问,最终都是定位到控制器,由控制器的某个方法去执行
 * 2.一个控制器对应着一个类,如果这些类需要进行同统一管理,怎么办?
 * 容器来进行类管理,不仅仅可以管理类,还可以将类的实例(对象)作为参数,传递给类方法,自动触发依赖注入
 * 依赖注入:将对象类型的数据,以参数的形式传到方法的参数列表中
 * URL访问:通过get方式将数据传到控制器指定方法中,但是只能传递字符串,数值
 * 举例:localhost/tp51/index/Demo1/getname/name/thinkphp51   --hello thinkphp51
 * 如果传递一个对象到当前方法中?怎么办?
 * 依赖注入:解决了向类中传递对象的问题
 *
 */
class Demo1
{
    //可以通过字符串,数值用get方式传值到类方法中
    public function getName($name = 'Perter')
    {
        return "hello" . $name;
    }
    /**
     * \app\common\Temp $temp :将会触发依赖注入
     * \app\common\Temp $temp 等价于$temp=new \app\common\Temp;
     *实例化参数对象的技术
     */
    public function getMethod(\app\common\Temp $temp)
    {
        $temp->setName('PHP中文网');
        return $temp->getName();
    }

    //绑定一个类到容器
    public function bindClass()
    {
        //把一个类放到容器中:相当于注册到容器中
        \think\Container::set('temp', '\app\common\Temp');
        //将容器中的类实例化并取出来用:实例化时可同时调用构造器进行初始化
        $temp = \think\Container::get('temp', ['name' => 'Peter_Zhu']);
        return $temp->getName(); //方法是:app\common\Temp::getName属性是Peter_Zhu
    }

    //使用助手函数实现绑定一个类到容器的功能
    public function bindClass1()
    {
        //把一个类放到容器中:相当于注册到容器中
        bind('temp','\app\common\Temp');
        //将容器中的类实例化并取出来用:实例化时可同时调用构造器进行初始化
        $temp = app('temp',['name' => 'Peter_Zhu1']);
        return $temp->getName();  //方法是:app\common\Temp::getName属性是Peter_Zhu1
    }

    //绑定一个闭包到容器:闭包现在请理解为一个匿名函数
    public function bindClosure()
    {
        //把一个闭包放到容器中
        \think\Container::set('demo', function($domain){
            return 'PHP中文网的域名是'.$domain;
        });
        //将容器中的闭包取出来用
        $temp = \think\Container::get('demo', ['domain' =>'www.php.cn']);
        return $temp; 
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值