abstract:<?php /** * Created by PhpStorm. * User: Administrator * Date: 2019/4/19 * Time: 16:44 * 容器:服务容器(IOC) * 实现
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2019/4/19 * Time: 16:44 * 容器:服务容器(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>'; } } //以上为工具类 /**************************************/ //1.创建容器类 class Container { //创建一个空数组用来保存工具类及实现方法 protected $instance =[]; //私有属性无法查看 // public $instance =[]; // $instance['类名'] ='类的实例化过程是一个函数'; //将需要实例化的类与他的实现方法进行绑定:将对象容器初始化 public function bind($abstract,Closure $process) { $this->instance[$abstract] = $process; // $this->instance['db'] = function (){ // return new Db('127.0.0.1','root','root'); // } } //创建特定类的实例 public function make($abstract,$params=[]) { return call_user_func_array($this->instance[$abstract],[]); } } /**************************************/ //2.服务注册:调用容器的bind()将对象注册到容器中 实例就是对象 $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(); });
简化Facade:在外观模式facade中,创建一个初始化方法事先注入容器
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2019/4/19 * Time: 17:50 */ 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 '门面模式简化调用方式:<br>'; Facade::initialize($container); echo Facade::connect(); echo Facade::check(); echo Facade::display();
外观模式facade主要解决类的耦合,实现代码接口统一方便调用。
Correcting teacher:西门大官人Correction time:2019-04-20 13:15:59
Teacher's summary:这是拷贝老师的课件吧?最好自己写,这样理解才深刻!