ホームページ バックエンド開発 PHPチュートリアル Laravel5 学習 4: Facade の動作メカニズム

Laravel5 学習 4: Facade の動作メカニズム

Jun 23, 2016 pm 01:32 PM

ファサードとは

公式ドキュメントには次のように記載されています:

ファサードは、アプリケーションのサービスコンテナでアクセスできるクラスの静的インターフェースを提供します。 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');
ログイン後にコピー
動作機構解析
  • Facades namespace
    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, ...... ]
    ログイン後にコピー
    すべての Facades クラスは Facades を継承し、getFacadeAccessor メソッドを実装する必要があります。その仕事は、コンテナから何を解析するかを定義することです。これは、バインド時にキャッシュを書き込む場合、ここでキャッシュを返す必要があり、そうでないと解析中にキャッシュが見つからないことを意味します。別の名前に変更してみてください。

    最後のステップは、app.php でエイリアス配列を設定することです。これには、Facades の自動読み込みが含まれます。それが最初に描いた絵です。 りー

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

    セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

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

    JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

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

    phpstormでCLIモードをデバッグする方法は? phpstormでCLIモードをデバッグする方法は? Apr 01, 2025 pm 02:57 PM

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

    確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

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

    システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

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

    PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

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

    フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

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

    See all articles