聊聊框架开发的依赖注入,容器与外观模式(下部)

不言
发布: 2018-07-14 13:47:45
原创
1521人浏览过

这篇文章主要介绍了关于聊聊框架开发的依赖注入,容器与外观模式(下部),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

外观模式:facade,也叫门面模式

1.用一句来说:就是将操作进行封装,对外提供一个统一的接口

2.因为操作可能分布在多个类中,而刚才学过的容器恰好可以将不同的类与实现封装起来

3.所以外观模式与依赖容器是黄金搭档,经常会放在一起使用

<?php 
/**
 * 用户登录的操作涉及三个操作
 * 1.连接数据库
 * 2.用户数据验证
 * 3.输出提示信息
 */
require 'container.php';
//创建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);
//可以在外观模型中使用初始化方法事先注入容器对象,来简化客户端调用
require 'container.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::initialize($container);
//静态统一调用内部的方法(无须重复注入依赖容器对象啦,实现了细节隐藏,通用性更强)
echo Facade::connect();
echo Facade::check();
echo Facade::display();
登录后复制

下面将代码整合在一起:

<?php 
//数据库操作类
class Db
{
//数据库连接
public function connect()
{
return '数据库连接成功<br>';
}
}
//数据验证类
class Validate
{
//数据验证
public function check()
{
return '数据验证成功<br>';
}
}
//视图图
class View
{
//内容输出
public function display()
{
return '用户登录成功';
}
}
/******************************************************************************/
//一.创建容器类
class Container
{
//创建属性,用空数组初始化,该属性用来保存类与类的实例化方法
public $instance = [];
//初始化实例数组,将需要实例化的类,与实例化的方法进行绑定
public function bind($abstract, Closure $process)
{
//键名为类名,值为实例化的方法
$this->instance[$abstract] = $process;
}
//创建类实例
public function make($abstract, $params=[])
{
return call_user_func_array($this->instance[$abstract],[]);
}
}
/******************************************************************************/
//二、服务绑定: 将类实例注册到容器中
$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();
});
登录后复制

php从php5.3起,大量的吸收其它编程语言的优点,支持越来越多的新特性,特别是php7.0的推出,使php发到了新高度,是一个里程碑式的版本。更多优秀的php开发教程,请持续关注:php中文网(www.php.cn)。

千图设计室AI海报
千图设计室AI海报

千图网旗下的智能海报在线设计平台

千图设计室AI海报 172
查看详情 千图设计室AI海报

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

聊聊框架开发的依赖注入,容器与外观模式(上部)

聊聊框架开发的依赖注入,容器与外观模式(中部)

以上就是聊聊框架开发的依赖注入,容器与外观模式(下部)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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