10_2:图像处理

 

实现同一个效果可以由容器的 bind()和 app()实现,也可以使用依赖
注入实现,还有 Facade(下节课重点探讨)实现,以及助手函数实现

 

 

 

一 依赖注入

 

 

 

 

依赖注入本质上是:对类的依赖通过构造器完成自动注入。

例如:在控制器架构方法和操作方法中一旦对参数进行对象类型约束则会自动触发依赖注入

由于访问控制器的参数都来自于url请求,普通变量就是通过参数绑定自动获取,对象变量则是特过依赖注入生成。

 

 

//1 新建Abc类:admin/controller/Abc.php

<?php namespace app\admin\controller; class Abc { public $say = '说点啥呢'; } //2 新建Demo类:admin/controller/Demo.php
<?php namespace app\admin\controller; class Demo { protected $name;//定义属性获取对象 //两个过程 自动绑定 自动实例化 public function __construct(Abc $abc)//News对象当做参数传入 自动实例化给$abc { $this->name = $abc;//把对象赋值给属性$name } public function index(){ return $this->name->say; } }

 

手动绑定

//手动绑定
    public function bind(){

        //bind('对象标识符','要绑定的对象');
        //bind('abc','app\admin\controller\Abc');//绑定对象

        //批量绑定形式一
        bind(['abc' => \app\admin\controller\Abc::class,]);

        //批量绑定形式二
        bind(['abc' => 'app\admin\controller\Abc',]);




        //return app('abc')->say;//实例化用的是单例模式
        //return app('abc',[],true)->say;//如果想重新实例化一个对象,则:每次调用总是会重新实例化

        
    }

 

 

 

允许通过类的方法传递对象的能力,并且限制了对象的类型 ( 约束 ),而传递的对象背后的那个类被自动绑定并且实例化了,这就是依赖注入

依赖注入的对象参数支持多个,并且和顺序无关

支持使用依赖注入的场景:
控制器架构方法
控制器操作方法
路由的闭包定义
事件类的执行方法
中间件的执行方法

 

 

 

 

 

二 容器

 

容器类的工作由 think\Container 类完成,但大多数情况我们只需要通过 app 助手函数或者 think\App 类即可容器操作,如果在服务类中可以直接调用 this->app 进行容器操作。

 

 

 

 

 

 

 

 

 

三 门面模式

核心:为容器的类提供了一个静态调用的方式

自己走一遍了解门面模式的流程

//1、首先在admin目录下创建common文件下 创建 Demo.php 类
<?php
namespace app\admin\common;
class Demo
{
    public function say(){
        return 'hello';
    }
}

//2 在admin目录下创建facade目录 创建 Demo.php
<?php
namespace app\admin\facade;
use think\Facade;

class Demo extends Facade
{
    protected static function getFacadeClass(){
        //获取当前Facade对应类名
        return 'app\admin\common\Demo';
    }
}

//3 在controller控制器中调用 Demo的方法
<?php
namespace app\admin\controller;
use app\admin\facade\Demo;
class Index
{
    public function hello(){
        return Demo::say();
    }
}

 

posted @ 2021-01-07 12:09  棉花糖88  阅读(100)  评论(0)    收藏  举报