yii 简单依赖注入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yii 简单依赖注入相关的知识,希望对你有一定的参考价值。

<?php
namespace app\controllers;
use Yii;
use yii\di\Container;
use yii\di\ServiceLocator;
use yii\web\Controller;
class DependencyController extends Controller{
    //这个是以容器方式注入
    public function actionIndex(){
        $container = new Container();
        $container->set(‘app\controllers\Driver‘,‘app\controllers\ManDriver‘);
        $car = $container->get(‘app\controllers\Car‘);
        $car->run();
    }
    //用服务器定位器来注入(基于容器注入的)
    public function actionServer(){
        //没有把car配置到web.php配置里
//        \Yii::$container->set(‘app\controllers\Driver‘,‘app\controllers\ManDriver‘);
//        $s1 = new ServiceLocator();
//        $s1->set(‘car‘,[
//            ‘class‘=>‘app\controllers\Car‘,
//        ]);
//        $car  = $s1->get(‘car‘);
//        $car->run();


        //配置到web.php里
        /**
         * 不用实例ServiceLocator 代码量少了点 他是从应用主体里读这个car 然后调用他里面的方法
        **/
        \Yii::$container->set(‘app\controllers\Driver‘,‘app\controllers\ManDriver‘);
        \Yii::$app->car->run();
    }
}
interface Driver{
    public function driver();
}
class ManDriver implements Driver{
    public function driver(){
        echo ‘a man drivering...<br>‘;
    }
}

class Car{
    private $driver = null;
    public function __construct(Driver $driver){
        $this->driver = $driver;
    }
    public function run(){
        $this->driver->driver();
    }
}

/**  依赖注入
 * 1.总体思路  创建一个容器,往容器里加注入class 用容器调用class里的方法 over
 * 2.用发上实例说明
 * 3.首先创建一个car 类,为了降低解耦度用了接口(Driver),实现接口driver方法即可。
 * 4.创建一个容器 $container = new Container();
 * 5.往容器里注入类用get方法 $car = $container->get(‘app\controllers\Car‘);
 * 6.此时还不能用这个容器,因为接口不能被实例化的,所以要先给这个容器添加配置说明
 * $container->set(‘app\controllers\Driver‘,‘app\controllers\ManDriver‘);
 * 这是告诉容器当遇到app\controllers\Driver这个接口是用app\controllers\ManDriver类去实现
 * 7.此时容器里也有了注入类的所有方法了,可以用对象方式去调用里面的方法了,如: $car->run();
 *
***/

以上是关于yii 简单依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

yii2 随笔依赖注入——yii2的依赖注入

YII容器类依赖注入

YII服务定位器依赖注入

PHP 依赖注入和控制反转再谈

再说php依赖注入

运用Unity实现依赖注入[结合简单三层实例]