Laravel5のコントラクトについて詳しく解説
Laravel5で新しく追加されたコントラクトというものですが、そもそもコントラクトとは何なのでしょうか?用途は何ですか?使い方?それについて話し合いましょう。
まず公式文書における契約の定義を見てみましょう:
Laravel のコントラクトは、フレームワークによって提供されるコア サービスを定義するインターフェイスのセットです。
これは、Laravel のコントラクトがフレームワークによって提供されるコア サービス インターフェイスのコレクションであることを意味します。
言い換えれば、各コントラクトはフレームワークのコアサービスに対応するインターフェースです。
それではどういう意味ですか?公式ウェブサイトの説明も非常にシンプルで、インターフェイスを使用するのは疎結合と簡素化のためです。
最初に大きなアイデアについては話さないで、いくつかの実用的な情報について話して、コントラクトの使用方法を見てみましょう
まず、契約インターフェースのリストを参照します:
コードは次のとおりです:
IlluminateContractsAuthGuard
IlluminateContractsAuthPasswordBroker
イルミネート契約バス配車係
IlluminateContractsCacheRepository
イルミネート契約キャッシュファクトリー
IlluminateContractsConfigRepository
イルミネート契約コンテナコンテナ
IlluminateContractsCookieFactory
IlluminateContractsCookieQueueingFactory
IlluminateContractsEncryptionEncrypter
Illuminate契約ルーティングレジストラ
... 多すぎてこれ以上載せるのが面倒です。公式ウェブサイトのマニュアルに記載されています。 IlluminateContractsRoutingRegistrar コントラクトを例に挙げて説明してみましょう。
まず、app/Providers/AppServiceProvider.php を開き、登録メソッドに注目してください:
コードは次のとおりです:
パブリック関数 register()
{
$this->app->bind(
'IlluminateContractsAuthRegistrar'、
「AppServicesRegistrar」
);
}
$this->app は Application オブジェクトであり、コンテナ オブジェクトでもあります。$this->app->bind メソッドを通じて、IlluminateContractsAuthRegistrar インターフェイスを実装するクラス AppServicesRegistrar をバインドします。
IlluminateContractsAuthRegistrar はコントラクトであることに注意してください。 AppServicesRegistrar このクラス ファイルは app/Services/Registrar.php にあります。
次に、AppHttpControllersAuthAuthController コントローラー クラスを調べて、__construct コンストラクターがあることを確認します。
コードは次のとおりです:
{
$this->auth = $auth;
$this->registrar = $registrar;
$this->ミドルウェア('ゲスト', ['例外' => 'getLogout']);
}
これには 2 つのパラメーターがあり、対応するクラス名前空間はスクリプトの先頭で確認できます。
コードは次のとおりです:
IlluminateContractsAuthGuard を使用します;これらは両方ともコントラクトですが、ここでは Registrar を取り上げます。 $registrar のインターフェイスの種類はパラメーターの種類によってのみ指定されますが、実際に呼び出されるときは、これが依存関係の挿入機能です。 , Laravel は、IlluminateContractsAuthRegistrar インターフェイスを実装するクラスまたはオブジェクトをコンテナ内で自動的に検索し、存在する場合はそれらを取り出して実パラメータとしてコンストラクターに渡します。
使用プロセス全体は、実際には 2 つのステップに要約できます:
コントラクトインターフェースを実装するオブジェクトをコンテナに登録します。
コンストラクターのパラメーターの型はコントラクト インターフェイス クラスとして指定され、フレームワークは条件を満たすオブジェクトを自動的に検索します。
それでは契約のメリットについてお話していきます。
疎結合
公式 Web サイトでは、密結合とは何か、およびコントラクト インターフェイスが疎結合である理由を説明する例が示されています。
まず密結合コードを見てみましょう:
コードは次のとおりです:
クラス リポジトリ {/**
* キャッシュ
*/
保護された $キャッシュ;
/**
* 新しいリポジトリ インスタンスを作成します。
*
* @param SomePackageCacheMemcached $cache
* @return void
*/
パブリック関数 __construct(SomePackageCacheMemcached $cache)
{
$this->cache = $cache;
}
/**
* ID で注文を取得します。
*
* @param int $id
* @return 注文
*/
パブリック関数 find($id)
{
if ($this->cache->has($id))
{
//
}
}
}
コンストラクターに詳細なキャッシュ実装 SomePackageCacheMemcached が注入されていることがわかります。キャッシュサーバーとして Redis を変更したり、API メソッドを変更したりする場合は、プロジェクトが大きい場合は何箇所か変更する必要があります。変更する必要があります。
それでは、Contract インターフェースはこの問題をどのように解決するのでしょうか?コードを参照してください:
コードは次のとおりです:
IlluminateContractsCacheRepository をキャッシュとして使用します;
クラス リポジトリ {
/**
* 新しいリポジトリ インスタンスを作成します。
*
* @param キャッシュ $cache
* @return void
*/
パブリック関数 __construct(Cache $cache)
{
$this->cache = $cache;
}
}
キャッシュ実装にはインターフェイス、つまりコントラクト IlluminateContractsCacheRepository を使用することに注意してください。これは単なるインターフェイスであり、その背後にある memcache であるか redis であるかを気にする必要はないからです。
シンプルさ
すべてのサービスがインターフェース定義を使用すると、サービスに必要な機能が決定しやすくなり、保守や拡張が容易になり、契約インターフェースも読みやすい簡潔な文書とみなすことができます。

thesecrettokeepingaphp-poweredwebsterunningsmootlyunderheavyloadinvolvesseveralkeystrategies:1)emform opcodecoduceSciptionexecutiontime、2)aatabasequerycachingwithiThing withiThistolessendavasoload、

コードをより明確かつ維持しやすくするため、依存関係が関心(DI)に注意する必要があります。 1)DIは、クラスを切り離すことにより、よりモジュール化されます。2)テストとコードの柔軟性の利便性を向上させ、3)DIコンテナを使用して複雑な依存関係を管理しますが、パフォーマンスの影響と円形の依存関係に注意してください。

はい、最適化されたAphPossibleandessention.1)CachingingusapCutoredatedAtabaseload.2)最適化、効率的なQueries、およびConnectionPooling.3)EnhcodeCodewithBultinctions、Avoididingglobalbariables、およびUsingopcodeching

keyStrategIestsoSificlyvoostphpappliceperformanceare:1)useopcodecachinglikeToreexecutiontime、2)最適化abaseの相互作用とプロペラインデックス、3)3)構成

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
