<?php //数据库连接过程 class Db { public function connect() { return '连接数据库====》成功 !<br>'; } } //验证过程 class Validate { public function check() { return '验证通过====》成功 !<br>'; } } //登陆显示信息 class View { public function display() { return '登陆成功====》成功 !<br>'; } } //创建容器类 class Container { // 创建容器属性,用关联数组保存类或类实例化方法 public $instance=[]; // 对$instance[] 写入,绑定 public function bind($login,Closure $process) { $this->instance[$login]=$process; } // 对$instance[] 读取,实例化对应的关联数组中的类名 public function make($login,$params=[]) { return call_user_func_array($this->instance[$login],[]); } } //实例化容器后对容器绑定外部类 $container = new Container(); $container ->bind('db',function (){ return new Db(); }); $container ->bind('validate',function (){ return new Validate(); }); $container->bind('view',function (){ return new View(); });
<?php /** * Created by PhpStorm. * User: 普通用户 * Date: 2019/6/23 * Time: 17:44 */ require 'facade.php'; class Facade { // 保存初始化容器类,静态定义可让类方法访问 protected static $container =null; //初始化获取容器类,方便类内其他方法重新获取 public static function initialize(Container $container) { static::$container = $container; } public static function connect() { return static::$container->make('db')->connect(); } public static function check() { return static::$container->make('validate')->check(); } public static function display() { return static::$container->make('view')->display(); } } //初始化facade类 Facade::initialize($container); //访问facade类 echo Facade::connect(); echo Facade::check(); echo Facade::display();
本章节对之前的依赖注入知识又重新重温一遍,可见依赖注入在开发中比较重要,经过学习对高度藕合的问题在后续开发中尽量避免,另外运用facade类实现不需要对基类实例化后再访问而方便的使用静态直接访问