摘要:<?php/** * 容器:也叫作服务容器(IOC) * 基本思想:拿来就用,最大限度简化外部对象调用,类似于即插即用 * 实现步骤: * 1.创建容器:本质就是讲一个类与它的实现绑定到一个关联数组 * 2.服务注册:初始化这个关联数组,将工具类绑定到容器中 * 3.容器依赖:也叫依赖容器,调用的时候直接传一个容器对象即可,不用再一
<?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 '用户登陆成功';
}
}
/***********************************************************************************************/
// 一.创建容器类
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],[]);
}
}
/********************************************************************************************************/
// 二、服务注册:其实就是调用容器的bind方法将对象注册到容器中
$container = new Container();
$container->bind('Db',function(){
return new Db();
});
$container->bind('Validate',function(){
return new Validate();
});
$container->bind('View',function(){
return new View();
});
// var_dump($container->instance);
// die();
//
/*********************************************************************************************/
// 三、容器注入:容器依赖,将所有用到的工具类,以容器的方式注入到当前工作累中
class User{
public function login(Container $container){
echo $container->make('Db')->connect();
echo $container->make('Validate')->check();
echo $container->make('View')->display();
}
}
$user = new User();
echo $user->login($container);
<?php
/**
* facade:门面模式,也叫外观模式
* 就是将一些操作进行封装,对外提供一个统一的接口
* 外观模式与容器依赖是黄金搭档
*/
require_once 'container.php';
/**
* Facade类实现三个功能
* 1.连接数据库
* 2.数据验证
* 3.输出提示
* 对于调用者来说,他不需要事先知道这三个操作在哪个具体的类中,他只需要调用Facade就可以执行以上三个操作
*/
class Facade
{
//连接数据库
public static function connect(Container $container)
{
return $container->make('Db') -> connect();
}
//数据验证
public static function check(Container $container)
{
return $container->make('Validate')->check();
}
//输出提示信息
public static function display(Container $container){
return $container -> make('View')->display();
}
}
//客户端调用
echo Facade::connect($container);
echo Facade::check($container);
echo Facade::display($container);
<?php
require_once 'container.php';
//简化门面模式
//在外观模式中,创建一个初始化方法事先注入容器,以简化代码
class Facade
{
protected static $container = null;
//创建一个初始化方法,用来注入容器
public static function initialize(Container $container)
{
self::$container = $container;
}
//连接数据库
public static function connect()
{
return self::$container->make('Db') -> connect();
}
//数据验证
public static function check()
{
return self::$container->make('Validate')->check();
}
//输出提示信息
public static function display(){
return self::$container -> make('View')->display();
}
}
//客户端调用
Facade::initialize($container);
echo Facade::connect();
echo Facade::check();
echo Facade::display();
						批改老师:天蓬老师批改时间:2018-12-26 17:41:40		
						
老师总结:生活中的容器是用来放东西的, 编程中的容器同样也是用来放东西的,但并不是什么东西都可以放,  这里主要是用来放对象或闭包,  通过门面,对容器中的成员进行包装后, 就可以以统一的方式进行调用 了					
 
                 
 
 
  
            