Laravelインターフェース指向プログラミング(実践)
インターフェイス指向プログラミングは、固定クラスではなくインターフェイスに基づいてアプリケーションを構築するコーディングにおける設計哲学です。
プログラマーであれば、インターフェイス指向プログラミング、固定クラスの代わりに抽象クラスを使用するなどのステートメントを聞いたことがあるかもしれません。
これらはすべて同じことを言っています。具体的なクラスではなく抽象インターフェイスに依存するようにアプリケーション コードを作成してください。 #########なぜ?
これが、この文を最初に聞いたときの私の正確な反応です。なぜクラスではなくインターフェイスを使用するのでしょうか?インターフェースを作成したとしても、そのインターフェースを実装するクラスを作成する必要があります。これは時間の無駄ではありませんか? ######もちろん違います! !
この世界で唯一変わらないものは変化そのものです。つまり、変化は永遠です。 プログラミングに関する限り、これには例外はありません。ビジネス ニーズは時間の経過とともに変化するため、コードも変更する必要があります。 したがって、コードは柔軟性を維持する必要があります。 インターフェイス指向プログラミングでは、コードを疎結合にして柔軟にすることができます。 #########どうやってするの?以下のコードを観察してください。
class Logger { public function log($content) { //日志保存到文件中. echo "Log to file"; } }
これは、ファイルにログを記録する単純なクラスです。コントローラー内で呼び出すことができます。
class LogController extends Controller { public function log() { $logger = new Logger; $logger->log('Log this'); } }
しかし、複数の場所 (データベース、ファイル、クラウドなど) にログを記録する必要がある場合はどうすればよいでしょうか。
次に、これらの変更に対応するために LogController クラスと Logger クラスを変更します。class Logger { public function logToDb($content) { //将日志记录到 db. } public function logToFile($content) { //将日志保存到 file. } public function logToCloud($content) { //将日志存储到 cloud. } }
class LogController extends Controller { public function log() { $logger = new Logger; $target = config('log.target'); if ($target == 'db') { $logger->logToDb($content); } elseif ($target == 'file') { $logger->logToFile($content); } else { $logger->logToCloud($content); } } }
したがって、物事を分割する必要があります。 SOLID 原則に従って、責任を適切なクラスに移すことができます。
class DBLogger { public function log() { //将日志记录到 db } } class FileLogger { public function log() { //将日志保存到 file } } class CloudLogger { public function log() { //将日志存储到 cloud } }
そして、コントローラーは次のように変更されます:
class LogController extends Controller { public function log() { $target = config('log.target'); if ($target == 'db') { (new DBLogger)->log($content); } elseif ($target == 'file') { (new FileLogger)->log($content); } else { (new CloudLogger)->log($content); } } }
これははるかに優れています。ここで、さらにログ ターゲットを追加したい場合は、新しいクラスを作成し、それをコントローラーの if-else に追加できます。
ただし、ロガーの選択はコントローラーが引き続き担当します。コントローラーの場合、さまざまなロガーについて知り、その中から選択する必要はありません。コンテンツをログに記録するには、 log() メソッドを備えたロガー クラスが必要です。
インターフェースの使用この状況はインターフェースの使用に適しています。では、インターフェースとは何でしょうか?
インターフェイスは、オブジェクトが実行できる操作を記述したものです。
この例では、コントローラーには log() メソッドを備えたロガー クラスのみが必要です。したがって、インターフェースには log() メソッドが必要であることを記述する必要があります。 interface Logger
{
public function log($content);
}
インターフェイスを実装する場合、インターフェイスを実装するクラスは、インターフェイスで定義された抽象メソッドの実装の詳細を提供する必要があります。
この例では、Logger インターフェイスを実装するクラスは、抽象メソッド log() の実装の詳細を提供する必要があります。
その後、このインターフェイスをコントローラーに挿入できます。
class LogController extends Controller { public function log(Logger $logger) { $logger->log($content); } }
これで、コントローラーは、渡されたロガーのタイプを気にしなくなります。知っておく必要があるのは、Logger インターフェイスを実装する必要があるということだけです。
したがって、このインターフェイスを実装するには Logger クラスを変更する必要があります。
class DBLogger implements Logger { public function log() { //将日志记录到 db } } class FileLogger implements Logger { public function log() { //将日志存储到 file } } class CloudLogger implements Logger { public function log() { //将日志保存到 cloud } }
これで、既存のコードに手を加えずにロガーを追加できるようになりました。必要なのは、Logger インターフェイスを実装する新しいクラスを作成することだけです。
class RedisLogger implements Logger { public function log() { //将日志存储到 redis } }
私たちのコードは柔軟で低結合になっているようです。以前のコードを変更せずに、いつでも実装方法を変更できます。
Dependency InjectionLaravel フレームワークを使用している場合、サービス コンテナを使用してインターフェイスの実装を自動的に登録できます。
Laravel ではすぐに使用できるメソッド インジェクションが提供されているため、インターフェイスと実装をバインドするだけで済みます。
まず、ロガー構成ファイルを作成する必要があります。これと同じように<?php
return [
'default' => env('LOG_TARGET', 'file'),
'file' => [
'class' => App\Log\FileLogger::class,
],
'db' => [
'class' => App\Log\DBLogger::class,
],
'redis' => [
'class' => App\Log\RedisLogger::class,
]
];
class AppServiceProvider extends ServiceProvider { public function register() { $default = config('log.default'); $logger = config("log.{$default}.class"); $this->app->bind( App\Contracts\Logger::class, // the logger interface $logger ); } }
これにより、logger.php構成からデフォルトのロガーが読み取られます。ファイルを作成し、Logger インターフェイスにバインドします。このようにして、Logger インターフェースを使用すると、コンテナーが解析してデフォルトの Logger インスタンスを返します。
デフォルトのロガーは env() アシスタントを使用して指定されるため、ローカル環境のファイルや運用環境の db など、異なる環境で異なるロガーを使用できます。
概要インターフェイスを使用すると、結合度の低いコードを記述し、抽象化レイヤーを提供できます。これにより、いつでも実装を変更できます。したがって、アプリケーションの可変部分はできる限りインターフェイス指向の方法で実装するようにしてください。
推奨チュートリアル: 「
PHP チュートリアル」
以上がLaravelインターフェース指向プログラミング(実践)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホット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)

ホットトピック











session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

LaravelとYiiの主な違いは、デザインの概念、機能的特性、使用シナリオです。 1.Laravelは、開発のシンプルさと喜びに焦点を当てており、迅速な開発や初心者に適したEloquentormやArtisan Toolsなどの豊富な機能を提供します。 2.YIIはパフォーマンスと効率を強調し、高負荷アプリケーションに適しており、効率的なActiverCordおよびキャッシュシステムを提供しますが、急な学習曲線があります。

MySQL関数は、データ処理と計算に使用できます。 1.基本的な使用には、文字列処理、日付計算、数学操作が含まれます。 2。高度な使用法には、複数の関数を組み合わせて複雑な操作を実装することが含まれます。 3.パフォーマンスの最適化では、Where句での機能の使用を回避し、GroupByおよび一時テーブルを使用する必要があります。

2024年の必須のLaravel拡張パッケージには、次のものが含まれます。 2。LaravelteLescope、詳細なアプリケーション監視を提供します。 3。RARAVELHORIZON、Redisキュータスクの管理。これらの拡張パックは、開発効率とアプリケーションのパフォーマンスを向上させることができます。

Composerは、PHPの依存関係管理ツールであり、Composer.jsonファイルを介してプロジェクトの依存関係を管理しています。 1)依存関係情報を取得するためのComposer.jsonを解析する。 2)依存関係を解析して、依存性ツリーを形成します。 3)PackagistからVendorディレクトリへの依存関係をダウンロードしてインストールします。 4)Composer.Lockファイルを生成して、依存関係バージョンをロックして、チームの一貫性とプロジェクトの保守性を確保します。

SentryとBugsnagをLaravelに統合すると、アプリケーションの安定性とパフォーマンスが向上する可能性があります。 1. Composer.jsonにSentrysdkを追加します。 2. config/app.phpにSentryサービスプロバイダーを追加します。 3。.envファイルでsentrydsnを構成します。 4. app \ exceptions \ handler.phpにセントリーエラーレポートを追加します。 5. Sentryを使用して例外をキャッチおよび報告し、追加のコンテキスト情報を追加します。 6. app \ exceptions \ handler.phpにbugsnagエラーレポートを追加します。 7. bugsnag監視を使用します

Laravelでライブチャットアプリケーションを構築するには、WebSocketとPusherを使用する必要があります。特定の手順には次のものが含まれます。1).envファイルでプッシャー情報を構成します。 2)broadcasting.phpファイルの放送ドライバーをプッシャーに設定します。 3)Pusherチャンネルを購読し、Laravelechoを使用してイベントを聴きます。 4)Pusher APIを介してメッセージを送信します。 5)プライベートチャネルとユーザー認証を実装します。 6)パフォーマンスの最適化とデバッグを実行します。

MySQLで文字セットと照合を構成する方法は次のとおりです。1。サーバーレベルでの文字セットとコレクションの設定:setNames'utf8 '; setCharacterSetutf8; setCollation_connection = 'utf8_general_ci'; 2。特定の文字セットと照合を使用するデータベースを作成します:createdatabaseexample_dbcharactersetutf8collateutf8_general_ci; 3.テーブルを作成するときに文字セットとコレクションを指定:createTableExample_table(idint
