ホームページ バックエンド開発 PHPチュートリアル フレームワーク開発における依存性注入、コンテナ、出現パターンについて話しましょう (パート 2)

フレームワーク開発における依存性注入、コンテナ、出現パターンについて話しましょう (パート 2)

Jul 14, 2018 pm 01:47 PM
依存性注入 容器

この記事では、チャット フレームワーク開発に関する依存関係の挿入、コンテナー、および外観モード (下部) を主に紹介します。一定の参考値があります。ここで共有します。必要な友人は参照してください

外観モード: ファサード (ファサード モードとも呼ばれます)

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();
});
ログイン後にコピー

php5.3 以降、php は他のプログラミング言語の多くの利点を吸収し、ますます多くの新機能をサポートしてきました。特に php7.0 のリリースにより、php は新しい高さのランドマークバージョンです。さらに優れた PHP 開発チュートリアルについては、引き続き PHP 中国語 Web サイト (www.php.cn) に注目してください。

以上がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

フレームワーク開発における依存性注入、コンテナー、および外観パターンについて話しましょう (パート 1)

フレームワーク開発のための依存性注入、コンテナー、および外観パターンについて話しましょう (中編)

以上がフレームワーク開発における依存性注入、コンテナ、出現パターンについて話しましょう (パート 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Docker を使用してコンテナ障害の回復と自動再起動を行う方法 Docker を使用してコンテナ障害の回復と自動再起動を行う方法 Nov 07, 2023 pm 04:28 PM

Docker は、コンテナー テクノロジーに基づく軽量の仮想化プラットフォームとして、さまざまなシナリオで広く使用されています。実稼働環境では、コンテナの高可用性と自動障害回復が非常に重要です。この記事では、Docker を使用してコンテナ障害の回復と自動再起動を行う方法を、具体的なコード例を含めて紹介します。 1. コンテナ自動再起動の設定 Docker では、コンテナ実行時に --restart オプションを使用することでコンテナの自動再起動機能を有効にすることができます。一般的なオプションは次のとおりです。 no: 自動的に再起動しません。静けさ

ファーウェイ、Inspur、その他の部門が共同で設立したオープンソースのコンテナミラーリングセンターであるAtomHubは、正式に公開テストを開始し、国内サービスを安定してダウンロードできると発表した。 ファーウェイ、Inspur、その他の部門が共同で設立したオープンソースのコンテナミラーリングセンターであるAtomHubは、正式に公開テストを開始し、国内サービスを安定してダウンロードできると発表した。 Jan 02, 2024 pm 03:54 PM

ファーウェイの公式ニュースによると、「開発者のためのすべて」をテーマとしたオープン・アトミック・デベロッパー・カンファレンスが12月16日から17日までの2日間、無錫で開催された。このカンファレンスは、オープン・アトミック・オープンソース財団、ファーウェイ、 Inspur.、DaoCloud、Xieyun、Qingyun、Hurricane Engine、OpenSDV Open Source Alliance、openEuler コミュニティ、OpenCloudOS コミュニティ、その他のメンバー ユニットが共同で AtomHub Trusted Mirror Center の構築を開始し、正式に公開テストが開始されました。 AtomHub は、共同構築、共同ガバナンス、共有の概念を遵守し、オープンソース組織と開発者に中立的でオープンで共同構築された信頼できるオープンソース コンテナ ミラー センターを提供することを目指しています。 DockerHub などのイメージ ウェアハウスの不安定性と制御不能性を考慮して、

CMD 経由で Wi​​ndows 10 または 11 に Redhat Podman をインストールする方法 CMD 経由で Wi​​ndows 10 または 11 に Redhat Podman をインストールする方法 Oct 02, 2023 pm 09:33 PM

Windows 11 または 10 に RedHatPodman をインストールする 以下の手順に従って、コマンド プロンプトまたは Powershell を使用して Windows マシンに RedHatPodman をインストールします。 ステップ 1: システム要件を確認する まず、Windows システムが最新のアップデートで実行されていることを確認する必要があります。 Podman の要件を実行するための要件を満たすことができます。 Windows 11 または Windows 10 バージョン 1709 (ビルド 16299) 以降を使用する必要があり、Windows Subsystem for Linux 2 (WSL2) と VM 機能を有効にする必要があります。まだアクティブ化されていない場合は、次の 2 段階のコマンドを使用できます。これを実行します

Angular での依存関係の挿入を理解するためのステップバイステップ ガイド Angular での依存関係の挿入を理解するためのステップバイステップ ガイド Dec 02, 2022 pm 09:14 PM

この記事では、依存性注入について説明し、依存性注入によって解決される問題とそのネイティブの記述方法を紹介し、Angular の依存性注入フレームワークについて説明します。

Phalconフレームワークで依存関係注入(Dependency Injection)を使用する方法 Phalconフレームワークで依存関係注入(Dependency Injection)を使用する方法 Jul 30, 2023 pm 09:03 PM

Phalcon フレームワークで依存関係注入 (DependencyInjection) を使用する方法の紹介: 現代のソフトウェア開発では、依存関係注入 (DependencyInjection) は、コードの保守性とテスト容易性を向上させることを目的とした一般的な設計パターンです。高速かつ低コストの PHP フレームワークである Phalcon フレームワークは、アプリケーションの依存関係を管理および整理するための依存関係注入の使用もサポートしています。この記事では、Phalcon フレームワークの使用方法を紹介します。

C++ STL コンテナをソートするにはどうすればよいですか? C++ STL コンテナをソートするにはどうすればよいですか? Jun 02, 2024 pm 08:22 PM

C++ で STL コンテナを並べ替える方法: sort() 関数を使用して、std::vector などのコンテナを適切に並べ替えます。順序付けされたコンテナー std::set および std::map を使用すると、要素は挿入時に自動的に並べ替えられます。カスタムの並べ替え順序の場合、文字列のベクトルをアルファベット順に並べ替えるなど、カスタム コンパレータ クラスを使用できます。

Golang 関数パラメータ渡しにおける依存性注入パターン Golang 関数パラメータ渡しにおける依存性注入パターン Apr 14, 2024 am 10:15 AM

Go では、依存関係注入 (DI) モードは、値の受け渡しやポインターの受け渡しなど、関数パラメーターの受け渡しを通じて実装されます。 DI パターンでは、依存関係は通常、分離を改善し、ロック競合を軽減し、テスト容易性をサポートするためにポインターとして渡されます。ポインターを使用すると、関数はインターフェイスの種類にのみ依存するため、具体的な実装から切り離されます。また、ポインターの受け渡しにより、大きなオブジェクトを渡す際のオーバーヘッドが削減されるため、ロックの競合が軽減されます。さらに、DI パターンでは依存関係を簡単にモックできるため、DI パターンを使用した関数の単体テストを簡単に作成できます。

C++ STL コンテナーの一般的な型は何ですか? C++ STL コンテナーの一般的な型は何ですか? Jun 02, 2024 pm 02:11 PM

C++STL で最も一般的なコンテナ タイプは、Vector、List、Deque、Set、Map、Stack、および Queue です。これらのコンテナーは、動的配列、二重リンク リスト、キーおよび値ベースの連想コンテナーなど、さまざまなデータ ストレージのニーズに対応するソリューションを提供します。実際には、STL コンテナを使用して、生徒の成績の保存など、データを効率的に整理してアクセスできます。

See all articles