laravelのファサード、IOCコンテナ、サービスプロバイダのアイデア分析?
まず、Laravelでcontainerのcontainerクラスを見て少し混乱しましたが、これがiocコンテナであることはわかるのですが、Laravelではよく理解できませんでした。解析を手伝ってください。ServiceProvider クラスも理解するのが難しいということです。時間があれば、原理を理解するのを手伝ってください。その使い方とその理由! よろしくお願いします
既存の情報をお寄せください
PHP プログラマーは IoC/DI をどのように理解するか
PHP プログラマー 方法依存関係注入コンテナを理解するため
返信内容:
一部の記事に用語が多数あるため、混乱が生じています。いわゆる ioc コンテナに関しては、ioc の実装は単なるアイデアであると思います。戦略パターンと思考を混同すべきではないと思います。 laravel のコンテナは、依存クラスを渡す必要がある場合、たとえばキャッシュ クラスを使用する場合、つまりキャッシュ サービスに依存する場合、依存クラスをサービスとして扱います。コンテナーは特定のインスタンス化を担当します。その仕事は、クラスを解析し、キャッシュ サービスが memcache、redis、またはその他のものであるかどうかを解析し、それをインスタンス化してコンシューマ クラスに注入することで、IOC を実現します。もちろん、これには抽象的な連携が必要です。そうでない場合、個別のものを注入し、メソッドが異なる場合は、当然機能しません。コンテナはクラスを管理するための単なる手段です。
そこで問題は、コンテナはどのクラス インスタンスを作成するかをどのようにして知るのかということです。つまり、クラスはどのように解析されるのでしょうか?これはサービス プロバイダーでバインドできます。ここで必要な実装をバインドすると、コンテナーがそれを必要とするときに、どのクラスに解決するかを認識します。
そこで再び疑問が生じますが、プログラムはどのサービス プロバイダーが利用可能であるかをどのようにして知るのでしょうか? これは、config/app で定義されます。専門的には、登録サービスです。
自分でサービス プロバイダーを作成し、サービスをバインドして登録することをお勧めします。または、pimple などの他の独立したサービス コンテナーを操作して、それを独自のプロジェクトで使用することもできます。これは理解しやすいです。
ファサードに関しては、実際にコンテナを通して実際のクラスに解析し、その後マジックメソッドを使って実際のクラス上でメソッドを実行するという方が分かりやすいと思います。私も酔っていました。
これは、多くの人がファサードを批判する理由でもあります。これは、構文糖の追加層が詰め込まれているだけです。 Facades はプロキシに似た外観モードで、Laravel でのその機能は実際には PHP の機能と似ています: class_alias のように、フレームワーク内の名前空間を持つクラスを覚えやすくします。 > IlluminateSupportFacadesApp 。 もう 1 つの利点は、Laravel の外観を簡単にカスタマイズできることです。たとえば、システムが提供するキャッシュが使いにくいと思われる場合、独自のキャッシュを使用します。 , 必要なクラス名に変更するだけです。もちろん、外観には他の利点もありますが、実際のターゲット オブジェクトのクラス定数に直接アクセスできないなどの欠点もあります。
IOC コンテナ IOC コンテナ、上記の 2 つの記事では、その他のことについて非常に明確にしています。もっと一般的な言葉で言えば、このコンテナは私たちのツールに相当します。私たちはどこにでもそれを持ち歩き、それを使用するときは、そこから必要なツールを取り出すだけで済みます。
それでは、ServiceProvider とは何でしょうか? ServiceProvider はコンテナに物 (通常はキャッシュなどの特定の機能を実装するサービスで、いくつかの設定を入れることもできます) を登録するだけで、「ツールボックスにツールを入れて出かける」というプロセスが完了します。フレームワークが実行されます。各 ServiceProvider の register メソッドが呼び出され、サービスの登録と開始が完了します。
これで、コンテナーからサービス インスタンスを取り出し、コントローラーまたは他のフレームワークが開始された後にそれを使用できるようになります。
簡単に説明するとこんな感じですが、5.0のソースコードframework/Application.php・laravel/framework・GitHubクラスから開始して、実行中のプロセスをステップバイステップで確認することができます。
これがあなたが望んでいることかどうかわかりません。 最近しばらく laave を見ていて感じたのは、
1. IoC は Phalcon の DI と同じで、1 つのコアを持つオブジェクト コンテナです:
<span class="x">protected static $instance;</span>
サービスプロバイダ: Laravel 5.1 ドキュメントガイド - サービスプロバイダ
サービスコンテナ: http://laravelbase.com/collections/1/47
ファサード: http://laravelbase.com/collections/1/49 それはすべて、このいまいましい用語のせいで、人によって使い方が異なります。
端的に言うと、サービスコンテナはインターフェースであり、サービスプロバイダはサービスを提供する実装クラスです。
たとえば、インターフェイス Storage クラス、実装クラス Ftp クラス、Local クラスなどです。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Laravel 9 と CodeIgniter 4 の最新バージョンでは、更新された機能と改善が提供されます。 Laravel9はMVCアーキテクチャを採用しており、データベース移行、認証、テンプレートエンジンなどの機能を提供します。 CodeIgniter4 は、HMVC アーキテクチャを使用してルーティング、ORM、およびキャッシュを提供します。パフォーマンスの面では、Laravel9 のサービスプロバイダーベースの設計パターンと CodeIgniter4 の軽量フレームワークにより、優れたパフォーマンスが得られます。実際のアプリケーションでは、Laravel9 は柔軟性と強力な機能を必要とする複雑なプロジェクトに適しており、CodeIgniter4 は迅速な開発や小規模なアプリケーションに適しています。

Laravel と CodeIgniter のデータ処理機能を比較します。 ORM: Laravel はクラスとオブジェクトのリレーショナル マッピングを提供する EloquentORM を使用しますが、CodeIgniter は ActiveRecord を使用してデータベース モデルを PHP クラスのサブクラスとして表します。クエリビルダー: Laravel には柔軟なチェーンクエリ API がありますが、CodeIgniter のクエリビルダーはよりシンプルで配列ベースです。データ検証: Laravel はカスタム検証ルールをサポートする Validator クラスを提供しますが、CodeIgniter には組み込みの検証関数が少なく、カスタム ルールの手動コーディングが必要です。実践例:ユーザー登録例はLarを示しています

初心者にとって、CodeIgniter は学習曲線が緩やかで機能は少ないですが、基本的なニーズはカバーしています。 Laravel は幅広い機能セットを提供しますが、学習曲線はわずかに急になります。パフォーマンスの点では、Laravel と CodeIgniter はどちらも良好なパフォーマンスを示します。 Laravel にはより広範なドキュメントとアクティブなコミュニティ サポートがあり、CodeIgniter はよりシンプルで軽量で、強力なセキュリティ機能を備えています。ブログアプリケーションを構築する実際のケースでは、Laravel の EloquentORM を使用するとデータ操作が簡素化されますが、CodeIgniter ではより手動の構成が必要になります。

大規模プロジェクト用のフレームワークを選択する場合、Laravel と CodeIgniter にはそれぞれ独自の利点があります。 Laravel はエンタープライズレベルのアプリケーション向けに設計されており、モジュール設計、依存関係の注入、強力な機能セットを提供します。 CodeIgniter は、速度と使いやすさを重視した、小規模から中規模のプロジェクトに適した軽量フレームワークです。複雑な要件と多数のユーザーを伴う大規模なプロジェクトには、Laravel のパワーとスケーラビリティがより適しています。単純なプロジェクトやリソースが限られている状況では、CodeIgniter の軽量で迅速な開発機能がより理想的です。

Laravel - アーティザン コマンド - Laravel 5.7 には、新しいコマンドを処理およびテストするための新しい方法が付属しています。これには職人コマンドをテストする新しい機能が含まれており、そのデモについては以下で説明します。

小規模なプロジェクトの場合、Laravel は強力な機能とセキュリティを必要とする大規模なプロジェクトに適しています。 CodeIgniter は、軽量さと使いやすさを必要とする非常に小規模なプロジェクトに適しています。

Laravel の Blade と CodeIgniter の Twig テンプレート エンジンを比較し、プロジェクトのニーズと個人的な好みに基づいて選択してください。Blade は MVC 構文に基づいており、適切なコード編成とテンプレートの継承を促進します。 Twig は、柔軟な構文、強力なフィルター、拡張サポート、セキュリティ サンドボックスを提供するサードパーティ ライブラリです。

Laravel - Artisan Console - Laravel フレームワークは、コマンドラインを介した対話のための 3 つの主要なツール、つまり Artisan、Ticker、REPL を提供します。この章ではArtisanについて詳しく説明します。
