>  기사  >  백엔드 개발  >  프레임워크 개발에서 종속성 주입, 컨테이너 및 모양 패턴에 대해 이야기해 보겠습니다(2부).

프레임워크 개발에서 종속성 주입, 컨테이너 및 모양 패턴에 대해 이야기해 보겠습니다(2부).

不言
不言원래의
2018-07-14 13:47:451382검색

이 글에서는 주로 채팅 프레임워크 개발에 관한 의존성 주입, 컨테이너 및 모양 모드(하단)를 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

모양 모드: Facade, 또한 이를 파사드 패턴이라고 합니다

1. 한 문장으로 말하면 연산을 캡슐화하고 외부 세계에 대한 통합 인터페이스를 제공합니다

2 연산은 여러 클래스에 분산될 수 있고 방금 배운 컨테이너는 다음과 같이 캡슐화할 수 있습니다. 구현

3 따라서 모양 패턴과 종속성 컨테이너는 골든 파트너이며 함께 사용되는 경우가 많습니다

<?php 
/**
 * 用户登录的操作涉及三个操作
 * 1.连接数据库
 * 2.用户数据验证
 * 3.输出提示信息
 */
require &#39;container.php&#39;;
//创建Facade类,实现以上三个功能
class Facade
{
//连接数据库
public static function connect(Container $container)
{
return $container->make(&#39;db&#39;)->connect();
}
//用户数据验证
public static function check(Container $container)
{
return $container->make(&#39;validate&#39;)->check();
}
//输出提示信息
public static function display(Container $container)
{
return $container->make(&#39;view&#39;)->display();
}
}
//客户端调用
echo Facade::connect($container);
echo Facade::check($container);
echo Facade::display($container);
//可以在外观模型中使用初始化方法事先注入容器对象,来简化客户端调用
require &#39;container.php&#39;;
class Facade
{
//创建成员属性保存容器对象
protected static $container = null;
//创建初始化方法为容器对象赋值
public static function initialize(Container $container)
{
static::$container = $container;
}
/**
* 因为已经在初始化方法中将容器对象导入到了当前类中,
* 并且保存到了类的静态属性中,为所有类成员所共享,
* 所以以下方法可直接调用不用再容器注入
* 注意:这里全部采用后期静态延迟绑定方法来访问当前容器对象
* 这主要是为了方便用户在静态继承的上下文环境中进行调用
*/
//连接数据库
public static function connect()
{
return static::$container->make(&#39;db&#39;)->connect();
}
//用户数据验证
public static function check()
{
return static::$container->make(&#39;validate&#39;)->check();
}
//输出提示信息
public static function display()
{
return static::$container->make(&#39;view&#39;)->display();
}
}
//客户端调用
//初始化类门面类中的容器对象
Facade::initialize($container);
//静态统一调用内部的方法(无须重复注入依赖容器对象啦,实现了细节隐藏,通用性更强)
echo Facade::connect();
echo Facade::check();
echo Facade::display();

코드는 아래에 통합되어 있습니다.

<?php 
//数据库操作类
class Db
{
//数据库连接
public function connect()
{
return &#39;数据库连接成功<br>&#39;;
}
}
//数据验证类
class Validate
{
//数据验证
public function check()
{
return &#39;数据验证成功<br>&#39;;
}
}
//视图图
class View
{
//内容输出
public function display()
{
return &#39;用户登录成功&#39;;
}
}
/******************************************************************************/
//一.创建容器类
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(&#39;db&#39;, function(){
return new Db();
});
//将Validate类实例绑定到容器中
$container->bind(&#39;validate&#39;, function(){
return new Validate();
});
//将View类实例绑定到容器中
$container->bind(&#39;view&#39;, function(){
return new View();
});

php는 php5.3에서 시작하여 수많은 다른 프로그래밍 언어를 흡수합니다. 이점에는 점점 더 많은 새로운 기능, 특히 PHP를 새로운 차원으로 끌어올린 획기적인 버전인 php7.0의 출시가 포함됩니다. 더 훌륭한 PHP 개발 튜토리얼을 보려면 PHP 중국어 웹사이트(www.php.cn)에 계속 관심을 가져주세요.

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

프레임워크 개발의 종속성 주입, 컨테이너 및 모양 패턴에 대해 이야기해 보겠습니다(상단)

프레임워크 개발의 종속성 주입, 컨테이너 및 모양 패턴에 대해 이야기해 보겠습니다(중간)

위 내용은 프레임워크 개발에서 종속성 주입, 컨테이너 및 모양 패턴에 대해 이야기해 보겠습니다(2부).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.