账户中心 退出系统
开发文档 资讯·分享 技术交流 会员登录
phpGrace GSCMS 公众号系统
依赖注入

依赖注入概述

控制器依赖注入可以实现在控制器的方法内自动实例化依赖类的功能,如 :
<?php
namespace grace\controller;
use grace\grace;

//注意此处使用 grace\tool\ 命名空间下的 directory 类
use grace\tool\directory;

class index extends grace{

    // 在 index() 函数内注入 $directory 对象
    // 框架在运行 index 控制器 -> index 方法时会自动实例化 grace\tool 类
    // 并将对象保存为 $directory 变量
    // 您可以在方法内直接使用此对象
        public function index(directory $directory){
            // 此处也可以使用 $this->directory 对象
            $arr = $directory->scan(PG_IN);
            print_r($arr);
        }

}

共享注入对象

通过控制器方法注入的对象除了可以以变量形式在方法内使用,还可以通过控制的属性调用( 在注入时 : $控制器->属性 = &被注入的对象 )。这样您就可以在控制器方法对应的视图中通过 $this->注入对象名称 的方式使用被注入的对象,达到视图共享的目的。

有参方法的依赖注入

对于有参方法,正常方法的函数及注入即可,url 访问此方法时忽略依赖注入对应的参数即可。如 :

<?php
namespace grace\controller;
use grace\grace;
use grace\tool\directory;

class index extends grace{

    public function index($name, directory $directory, $age){
        $list = $directory->list(PG_APP_ROOT);
        print_r($list);
        echo $name.' - '.$age;
    }

}

url : http://localhost/index/index/name/grace/age/18
框架会自动解析传递对应的参数,并自动实例化依赖类。

哪些类可以被注入?

模型类、工具类、自定义类等凡是满足自动加载规则以及可以通过 new 关键字进行实例化的类都可以被控制方法注入;

依赖注入特点

1 简化实例化过程;
2 依赖注入底层是通过容器创建对象,保证了对象的单例模型,使得系统更加高效;