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

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

Jul 14, 2018 am 11:59 AM
フレームワーク開発

この記事では、チャット フレームワークの開発について、主に依存性注入、コンテナ、外観モード (中編) について紹介します。一定の参考値があるので、共有します。必要な友人は参考にしてください。

オブジェクト間の結合問題は依存性注入により解決しましたが、根本的な解決には至っていません;

このより合理的で優れた解決策をコンテナ技術の説明を通して説明していきます。

コンテナは実際にはボックスであり、クラス、クラス インスタンス、クロージャ、関数などのサービス リソースを含めることができます。呼び出し先を内部に配置できるだけでなく、

メインの呼び出し元も含めることができます。内部にオブジェクトを配置することもできます。つまり、コンテナは神秘的なものではなく、私たちが日常的に目にする物を入れるためのコンテナと同じ機能を持っています。

現在、コンテナ技術は広く使われており、多くの優れた PHP 開発はコンテナ技術に基づいてサービスの自動読み込みを実現しています。

例: Laravel、ThinkPHP5.1 など。

コンテナ (サービス コンテナとも呼ばれ、(IOC) と略されます)

基本的な考え方: これを使用するだけで、外部オブジェクトの呼び出しを最大限に簡素化できます。[プラグ アンド プレイ] と同様です。アイデア

基本的な実装は 3 つのステップに分かれています:

1. コンテナを作成し、クラスとクラスのインスタンス化プロセスをコンテナにバインドします (クラスに限定されませんが、インターフェイスなど)

2. サービス登録、コンテナに使用できるすべてのツール クラスをバインドします

3. コンテナの依存関係: または依存コンテナと呼ばれ、コンテナ オブジェクトは、次の場合に直接渡されます。ワーク クラスの呼び出しですが、ツール クラスのインスタンス化はコンテナによって完了します。

次は実装のソース コードです:

<?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
{
//创建属性,用空数组初始化,该属性用来保存类与类的实例化方法
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],[]);
}
}
/******************************************************************************/
//二、服务绑定: 将类实例注册到容器中
$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();
});
//测试:查看一下当前容器中的类实例
// var_dump($container->instance); die;
/******************************************************************************/
//三、容器依赖:将容器对象,以参数的方式注入到当前工作类中
//用户类:工作类
class User
{
//创建三个成员属性,用来保存本类所依赖的对象
// protected $db = null;
// protected $validate = null;
// protected $view = &#39;&#39;;
//这三个与外部对象对应的三个属性可以全部删除了,因为它们都已经事先注册到了容器中
//用户登录操作
// public function login(Db $db, Validate $validate, View $view)
//此时,只需从外部注入一个容器对象即可,Db,Validate和View实例方法全部封装到了容器中
public function login(Container $container)
{
//实例化Db类并调用connect()连接数据库
// $db = new Db();
// echo $db->connect();
echo $container->make(&#39;db&#39;)->connect();
//实例化Validate类并调用check()进行数据验证
// $validate = new Validate();
// echo $validate->check();
echo $container->make(&#39;validate&#39;)->check();
//实例化视图类并调用display()显示运行结果
// $view = new View();
echo $container->make(&#39;view&#39;)->display();
}
}
//在客户端完成工具类的实例化(即工具类实例化前移)
// $db = new Db();
// $validate = new Validate();
// $view = new View();
//现在注入过程就非常简单了,只需要从外部注入一个容器对象即可
//创建User类
$user = new User();
//调用User对象的login方法进行登录操作
// echo $user->login();
// 将该类依赖的外部对象以参数方式注入到当前方法中,当然,推荐以构造器方式注入最方便
echo &#39;<h3>用依赖容器进行解藕:</h3>&#39;;
// echo $user->login($db, $validate, $view);
//现在工作类中的login方法不需要再像对象依赖注入那样写三个对象了,只需要一个容器对象就可以了
echo $user->login($container);
ログイン後にコピー

実際、コンテナ モードでは次のこともできます。さらに簡素化するには、外観デザイン モードを使用します。

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

関連する推奨事項:

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

以上がフレームワーク開発における依存性注入、コンテナ、出現パターンについて話しましょう(中)の詳細内容です。詳細については、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

多言語フレームワーク開発に PHP を使用するにはどうすればよいですか? 多言語フレームワーク開発に PHP を使用するにはどうすればよいですか? May 13, 2023 am 08:09 AM

グローバリゼーションの深化に伴い、多言語をサポートする必要がある Web サイトやアプリケーションがますます増えています。 Web 開発で広く使用されているプログラミング言語である PHP は、多言語フレームワークの開発をサポートする必要もあります。この記事では、PHP を使用して多言語フレームワークを開発する方法を紹介します。 1. 多言語フレームワークとは まず、多言語フレームワークとは何なのかを理解しましょう。多言語フレームワークとは、その名のとおり、複数の言語をサポートできるフレームワークです。国際化およびローカリゼーションの設計では、多言語フレームワークが不可欠です。さまざまなサポートが可能です

Go言語フレームワーク開発における例外処理とエラーコードの設計 Go言語フレームワーク開発における例外処理とエラーコードの設計 Jun 05, 2023 pm 09:21 PM

インターネット技術の継続的な発展に伴い、開発に Go 言語を使用し始める企業が増えています。 Go 言語は、その効率性、安定性、使いやすさにより開発者に好まれています。エンタープライズレベルの開発では、フレームワークは不可欠な部分です。そこでこの記事では、Go言語フレームワーク開発における例外処理とエラーコードの設計を行う方法を紹介します。 1. 例外処理とは何ですか? コンピュータプログラミングにおいて、例外処理とは、プログラムの実行中に異常な状況が発生した場合にプログラムがとるべき措置を指します。これらの異常には、ハードウェア障害、ソフトウェア欠陥が含まれます

PHP でカスタム フレームワークを構築するにはどうすればよいですか? PHP でカスタム フレームワークを構築するにはどうすればよいですか? Sep 05, 2023 pm 01:18 PM

PHP でカスタム フレームワークを構築するにはどうすればよいですか?カスタム フレームワークは、Web 開発における一般的な要件の 1 つです。独自のフレームワークを構築することで、開発者はプロジェクトのニーズをより適切に満たし、開発効率を高めることができます。この記事では、PHP で単純なカスタム フレームワークを構築する方法を説明します。 1. フレームワークの構造 一般的な PHP フレームワークには、次の部分が含まれます。 ルーター: URL をコントローラーおよびアクション (メソッド) にマッピングする役割を果たします。コントローラー: リクエストを受信して​​処理します。

Golangフレームワーク開発を学ぶ際の考え方と注意点 Golangフレームワーク開発を学ぶ際の考え方と注意点 Jun 03, 2023 am 08:41 AM

インターネットの急速な発展に伴い、新世代の効率的なプログラミング言語としての Golang 言語は開発者にとって不可欠な要素となっています。 Golang 言語は、その簡潔な構文、効率的な同時実行パフォーマンス、優れたクロスプラットフォーム互換性、自己完結型の静的リンク ライブラリにより、広く注目され、応用されています。この過程で、フレームワークの重要性がますます明らかになってきました。 Golangフレームワーク開発を学ぶ際には、考え方や注意点も重要です。 1. フレームワークの選択 1. フレームワークの理解

PHP8 フレームワークを使用した MVC の開発: 初心者が知っておくべき重要な概念とテクニック PHP8 フレームワークを使用した MVC の開発: 初心者が知っておくべき重要な概念とテクニック Sep 11, 2023 am 09:43 AM

PHP8 フレームワークによる MVC の開発: 初心者が知っておくべき重要な概念とテクニック はじめに: インターネットの急速な発展に伴い、Web 開発は今日のソフトウェア開発業界で重要な役割を果たしています。 PHP は Web 開発に広く使用されており、開発者がアプリケーションをより効率的に構築できるようにする成熟したフレームワークが多数あります。その中でも、MVC (Model-View-Controller) アーキテクチャは、最も一般的で広く使用されているパターンの 1 つです。この記事では、初心者が PHP8 フレームワークを使用して MVC アプリケーションを開発する方法を紹介します。

PHP8 フレームワークを使用した MVC の開発: ステップバイステップ ガイド PHP8 フレームワークを使用した MVC の開発: ステップバイステップ ガイド Sep 11, 2023 am 10:05 AM

PHP8 フレームワークによる MVC の開発: ステップバイステップ ガイド はじめに: MVC (Model-View-Controller) は、アプリケーションのロジック、データ、およびユーザー インターフェイスを分離するために使用される、一般的に使用されるソフトウェア アーキテクチャ パターンです。これは、コードの管理と保守を改善するために、アプリケーションを 3 つの異なるコンポーネントに分離する構造を提供します。この記事では、PHP8 フレームワークを使用して MVC パターンに準拠するアプリケーションを開発する方法を検討します。ステップ 1: MVC パターンを理解する MVC アプリケーションの開発を開始する前に、

PHP8 フレームワーク開発 MVC パターン: コードの保守性を向上させるためのベスト プラクティス PHP8 フレームワーク開発 MVC パターン: コードの保守性を向上させるためのベスト プラクティス Sep 11, 2023 pm 08:12 PM

PHP8 フレームワーク開発 MVC パターン: コードの保守性を向上させるためのベスト プラクティス はじめに: インターネットの急速な発展に伴い、Web サイトと Web アプリケーションのニーズはますます多様化および複雑化しています。この需要を満たすために、開発者は効率的で信頼性の高いフレームワークを使用して開発プロセスを合理化する必要があります。多くの PHP フレームワークの中で、MVC (Model-View-Controller) パターンは、最も一般的で強力なアーキテクチャの 1 つです。この記事では、生成を改善するために PHP8 フレームワークで MVC パターンを開発するためのベスト プラクティスを紹介します。

golang フレームワーク開発プロセスの最新の進捗状況 golang フレームワーク開発プロセスの最新の進捗状況 Jun 05, 2024 pm 02:52 PM

Golang フレームワーク開発プロセスの最新の進歩: 最新のフレームワーク: Jin、Echo、Fiber などの最新のフレームワークは、高度な機能とパフォーマンスの最適化を提供します。実践例: Gin を使用して RESTful API を構築する: ユーザー モデルとコントローラーを作成します。 HTTP ルーティングとリクエストの解析を処理するには、Gin を使用します。 CRUD 操作 (作成、読み取り、更新、削除) を実装します。

See all articles