博主信息
博文 28
粉丝 0
评论 0
访问量 20735
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
容器注入和Facaded--2018年05月31日
植树青年小江同志的博客
原创
938人浏览过

## 容器注入

容器,也称服务容器,简称和(IOC),深入理解其实应是控制反转。

一言蔽之,即最大化简化外部对象的调用,即插即用,最终实现代吗的高内聚低耦合。


步骤:

1. 创建容器,将类之间的实例化过程绑定到容器中(不局限于类,也可以是接口或者闭包等)

2. 服务注册,将可能用到的工具类绑定到容器当中。

3. 容器依赖:也就是一依赖注入容器,调用工作类是直接传入容器对象,而工具类的实例化由容器完成。


> 总结,改方式就是为了依赖实例们提供一个容器,它担任全局的注册树,可以方便的通过它来获取依赖的实例,提高代码可用性。


## Facade 外观模式

外观模式,也就是门面模式

1. 一言蔽之,就是将操作进行封装,对外提供统一接口

2. 通过容器可以很好的将不同的类封装起来,将不同的操作统一到一块儿

3. 两者结合就能够实现统一的接口

实例

<?php





/**
 * 工具类
 */

class Db
{
	public function connect()
	{
		return '数据库连接成功<br>';
	}
}


class Validate
{
	//数据验证
	public function check()
	{
		return '数据验证成功<br>';
	}
}

class View
{
	//内容输出
	public function display()
	{
		return '用户登录成功';
	}
}

/**
 * 创建容器类
 */

 class Container
 {
	
	 protected $instances;

	 public function bind($abstract, $process)
	 {
		 if ($process instanceof Closure) {
			 $this->instances[$abstract] = $process;
		 } 
	 }

	 public function make($abstract, $params = [])
	 {
		 array_unshift($params, $this);

		 return call_user_func_array($this->instances[$abstract],$params);
	 }
 }

/**
 * 工作类
 */

 class User
 {
	 public function login(Container $container)
	 {
		echo $container->make('db')->connect();
		echo $container->make('validate')->check();
		echo $container->make('view')->display();
	 }
 }


/**
 * 服务绑定
 */

 $container = new Container();

//  注册当前工作类

 $container->bind('user', function ($container, $moduleName) {
	 return new User($container->make($moduleName));
 });

//  注册工具类

$container->bind('db', function($container) {
	return new Db();
});

$container->bind('validate', function($container) {
	return new Validate();
});

$container->bind('view', function($container) {
	return new View();
});

// var_dump($container);

$user = new User();
echo $user->login($container);


/**
 * facaded
 */

 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::initialize($container);

 echo '<hr>';

echo Facade::connect();
echo Facade::check();
echo Facade::display();

运行实例 »

点击 "运行实例" 按钮查看在线实例


批改状态:未批改

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学