Laravel5 学習 4: Facade の動作メカニズム
ファサードとは
公式ドキュメントには次のように記載されています:
ファサードは、アプリケーションのサービスコンテナでアクセスできるクラスの静的インターフェースを提供します。 Laravel には多くのファサードが付属しており、知らず知らずのうちにそれらを使用している可能性もあります。 Laravel の「ファサード」は、IoC コンテナ内の基本クラスの静的プロキシとして機能します。提供される構文には、従来の静的メソッドよりも高いテスト容易性と柔軟性を維持しながら、シンプルさと表現の容易さという利点があります。
正直に言うと、この文章は人間の言葉のようには読めません。分解してみます。
まず、Facadesはクラスですが、どのようなクラスですか?これは基本クラスの静的プロキシです。
次に、Facades は、laravel5 に対応して、IOC コンテナーから直接取得できます。つまり、アプリコンテナーにすでに存在しています。
最後に、なぜ ファサード が必要なのでしょうか? 1 つ目の利点は、提供される構文がより簡潔で表現しやすいことです。実際にはこれが主な理由ではなく、主な理由は次のとおりです: テストを容易にし、カップリング (プロキシ モードの利点) を減らすためです
PS: コンテンツのこの部分はインターネットから参照されています。 : 元のアドレス
us $app は、laravel の特別なグローバル変数であり、最初に起動されたときの ioc コンテナのオブジェクト インスタンスであることはご存知でしょう。
したがって、ioc コンテナからインスタンスを取得したい場合は、次のように記述します:
$value = $app->make('cache')->get('key');
$app は PHP の ArrayAccess インターフェイスを実装しているため、次のように簡略化して書くことができます:
$value = $app['cache']->get('key');
関数を使用することもできます 次のように記述しますこれ:
$value = app('cache')->get('key');
この時、Facace が飛び出してきて、こんな風に書けると言いました:
$value = Cache::get('key');
laravel をプレイしたことがある人なら、遭遇した際に目にしたことがあると思います。 ファサード 名前空間をインポートするときは、use XXX を使用するだけです。完全な名前空間を書き出す必要はありません。何故ですか?
通常のクラスの名前空間は次のように記述する必要があります:
use Illuminate\Support\Facades\Cache;
Facades 次のように記述するだけで済みます:
use Cache;
なぜこのようになれるのでしょうか?実行プロセスの一部を観察したところ、分析は次のとおりです:
この図の重要なポイントは、AliasLoader に登録された自動読み込みメソッドです。これは、app.php 設定にあるエイリアス配列を使用し、それによってこのエイリアスを渡します。 、対応する実際のクラスが存在するファイルを見つけて、オブジェクトのインスタンス化を完了します。
PS: 引き続き Cache を例として取り上げます
最初に構築する必要があるのは、その機能を実装するために Cache クラス自体です。ここでの対応するファイルは次のとおりです:
IlluminateCacheCacheManager (注: Cache の実装は複数あるため、マネージャーを通じて目的の Cache 実装を取得できます。)
Cache クラスを作成した後、それをサービス内で Go にバインドする必要があります。ここでのサービス プロバイダーの場所は次のとおりです:
IlluminateCacheCacheServiceProvider コードのバインディング部分は次のとおりです:
public function register() { $this->app->singleton('cache', function ($app) { return new CacheManager($app); }); ...... }
ここで注意する必要があるのは、バインド時に文字列「cache」が使用される理由です。これについては後で説明します。 。サービス プロバイダーを作成した後、app.php のプロバイダー配列でサービス プロバイダーを構成する必要があります。ここでのコードは次のとおりです。ファサード
場所は IlluminateSupportFacadesCache にあります。
'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Foundation\Providers\ArtisanServiceProvider::class, Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, ...... ]
最後のステップは、app.php でエイリアス配列を設定することです。これには、Facades の自動読み込みが含まれます。それが最初に描いた絵です。 りー

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
