首页 > 其他分享 >yii2依赖注入

yii2依赖注入

时间:2024-03-30 14:46:03浏览次数:25  
标签:依赖 name app controllers user sentMail yii2 public 注入

yii2依赖注入

所谓依赖注入,实质上就是当某个类对象需要使用另一个类实例的时候,不在类内部实例化另一个类,而将实例化的过程放在类外面实现,实例化完成后再赋值给类对象的某个属性。 这样的话该类不需要知道赋值给它的属性的对象具体属于哪个类的,当需要改变这个属性的类型的时候,无需对这个类的代码进行任何改动,只需要在使用该类的地方修改实例化的代码即可。

依赖注入的方式有两种:1.构造函数注入,将另一个类的对象作为参数传递给当前类的构造函数,在构造函数中给当前类属性赋值;2.属性注入,可以将该类某个属性设置为public属性,也可以编写这个属性的setter方法, 这样就可以在类外面给这个属性赋值了。

依赖注入和依赖注入容器使用

<?php

namespace app\controllers;
use yii\di\Container;

class TestController extends \yii\base\Controller
{
    public function actionIndex()
    {
        $container = new Container();
        $container->set('app\controllers\Mail','app\controllers\MailOne');
        $user = $container->get('app\controllers\User',['name'=>'huyongjian']);
        $user->sentMail();

        //依赖注入容器
        //$container = new Container();
        //$container->set('app\controllers\Mail','app\controllers\MailTwo');
        //$user = $container->get('app\controllers\User',['name'=>'huyongjian']);
        //服务器定位器
        //$locator = new ServiceLocator;
        //$locator->set('user', $user);
        //$locator->user->sentMail();

        //使用yii::$container和Yii::createObject
        Yii::$container->set('app\controllers\Mail','app\controllers\MailTwo');
        $user = Yii::createObject('app\controllers\User',['name'=>'huyongjian']);
        $user->sentMail();
    }
}

class User
{
    public $mail;
    public $name;

    public function __construct(Mail $mail,$name)
    {
        $this->mail = $mail;
        $this->name = $name;
    }

    public function sentMail(){
        echo 'welcome ' . $this->name;
        echo '<br>';
        $this->mail->sentMail();
    }

}

interface Mail{
    public function sentMail();
}

class MailOne implements Mail{
    public function sentMail(){
        echo 'mail class sent One';
    }
}

class MailTwo implements Mail{
    public function sentMail(){
        echo 'mail class sent two';
    }
}
 

标签:依赖,name,app,controllers,user,sentMail,yii2,public,注入
From: https://www.cnblogs.com/hu308830232/p/18105457

相关文章

  • yii2事件
    yii2事件事件可以将自定义代码“注入”到现有代码中的特定执行点。1yii\base\Event封装了与时间相关的有关数据并提供了一些功能函数作为辅助classEventextendsObject{public$name;//事件名public$sender;//事件发布者,通常是......
  • Yii2验证器Validator
    Yii2验证器Validator控制器publicfunctionactionIndex(){$data=['LoginForm'=>['username'=>'huyongjian','password'=>'1234']];$model=newLoginForm();$model->load($......
  • yii2-队列使用
    yii2-队列使用安装yii2-queuecomposerrequireyiisoft/yii2-queue安装yii2-rediscomposerrequireyiisoft/yii2-redis控制台配置文件console.php和web.php'redis'=>['class'=>'yii\redis\Connection',&......
  • Yii2 过滤器
    Yii2过滤器过滤器AccessControllerAccessControl基于一组规则提供简单的访问控制/***{@inheritdoc}*/publicfunctionbehaviors(){return['access'=>['class'=>AccessControl::class,......
  • yii2数据库访问对象
    yii2数据库访问对象配置数据库链接$db=newyii\db\Connection(['dsn'=>'mysql:host=localhost;dbname=xhj','username'=>'root','password'=>'123456',......
  • yii2 扩展
    yii2扩展示例安装扩展composerrequire--prefer-distyiisoft/yii2-imagine使用扩展useyii\imagine\Image;publicfunctionactionIndex(){Image::thumbnail('@webroot/img/test.jpg',120,120)->save(Yii::getAlias('@runt......
  • sql 注入的类型之 post 基于错误的注入(sqllib靶场less-11-12)(通过burpusite分析)
      post注入和get注入一样,都是基于数据库没有对语句进行足够多的过滤,导致用户可以直接在url上执行sql语句。这两基本上没区别,但是基于post的注入在真实情况下会比get的多得多,最典型的post注入就是万能密码万能密码万能密码便是post注入的一种(也是sql注入),其原理也是因为后端......
  • yii2表单使用
    yii2表单使用模型models/form/EntryForm.php<?phpnamespaceapp\models\form;useyii\base\Model;classEntryFormextendsModel{public$name;public$email;publicfunctionrules(){return[[['name',&......
  • yii2 rules验证规则大全
    yii2rules验证规则大全required : 必须值验证属性[['name','email'],'required'][['name'],'required','message'=>'提示信息']email : 邮箱验证[['email'],'email','message'=......
  • Yii2行为用法
    Yii2行为用法使用行为(behavior)可以在不修改现有类的情况下,对类的功能进行扩充行为类(app\common\behaviors\MyBehavior)<?phpnamespaceapp\common\behaviors;useyii\base\Behavior;classMyBehaviorextendsBehavior{public$name;public$age;......