摘要://container.php <?php /** * 容器:也叫服务容器(IOC) * 基本思想:拿来就用,最大限度简化外部对象调用,类似于:即插即用 * 基本实现分三步: * 1,创建容器:本质就是讲一个类与它的实现绑定到一个关联数组; * 2,服务注册:初始化这个关联数组,将工具类绑定到容器中; * 3
//container.php <?php /** * 容器:也叫服务容器(IOC) * 基本思想:拿来就用,最大限度简化外部对象调用,类似于:即插即用 * 基本实现分三步: * 1,创建容器:本质就是讲一个类与它的实现绑定到一个关联数组; * 2,服务注册:初始化这个关联数组,将工具类绑定到容器中; * 3,容器依赖:也叫依赖容器,调用的时候直接传一个容器对象即可,不用再一个一个传具体对象 */ //数据库操作类 class Db { //数据库链接 public function connect() { return '数据库链接成功<br>'; } } //数据验证类 class Validate { //数据验证 public function check() { return '数据验证成功<br>'; } } //视图类 class View { public function display() { return '用户登录成功<br>'; } } /**************************************************************/ //一、创建容器类 class Container { //创建一个空数组用来保存工具类以及实现方法 protected $instance = []; //将需要实例化的类与它的实现方法进行绑定:将对象容器初始化 public function bind($abstract,Closure $process) { $this->instance[$abstract] = $process; } //创建特定类的实例 public function make($abstract,$params=[]) { return call_user_func_array($this->instance[$abstract],[]); } } /**************************************************************/ //二、服务注册:其实就是调用容器的bing()将对象注册到容器中 $container = new Container(); //将Db类绑定到容器中 $container->bind('db',function(){ return new Db(); }); //将Validate类绑定到容器中 $container->bind('validate',function(){ return new Validate(); }); //将View类绑定到容器中 $container->bind('view',function(){ return new view(); });
?>
//demo5.php
<?php //在外观模式facade中,创建一个初始化方法实现注入容器,来简化代码 require 'container.php'; class Facade { //保存容器对象 protected static $container = null; //创建初始化方法,给容器对象赋值 public static function initialize(Container $container) { static::$container = $container; } //1,链接数据库 public static function connect() { return static::$container->make('db')->connect(); } //2,数据验证 public static function check() { return static::$container->make('validate')->check(); } //3,输出提示 public static function display() { return static::$container->make('view')->display(); } } //客户端调用 echo '<h3>简化后facade调用:</h3>'; Facade::initialize($container); echo Facade::connect(); echo Facade::check(); echo Facade::display();
批改老师:天蓬老师批改时间:2018-11-26 17:16:27
老师总结:门面技术,也叫外观模式, 学完这些基础内容后,如果想进阶的话, 必须学习php中的反射技术, 现代容器技术是包依赖的载体,而容器成员的调用 ,几乎离不开反射, 向上吧,少年