PHPのコマンドパターンとその応用方法を詳しく解説
コマンド パターンは、リクエストをオブジェクトにカプセル化する設計パターンで、さまざまなリクエスト、キューまたはログのリクエストでクライアントをパラメータ化できるようにし、取り消し可能な操作をサポートします。このパターンの中心的な考え方は、クライアントによって要求された動作を実装動作から分離することです。 PHP のコマンド モードは、アプリケーション ログを記録する必要があるシステムや、履歴コマンドを動的に実行する必要があるシステムで広く使用されています。
コマンド パターンのコア コンポーネントには、コマンド、受信者、呼び出し元が含まれます。コマンドオブジェクトはクライアントの操作要求とパラメータを保持し、受信側はこれらの要求を実際に実行するオブジェクトであり、呼び出し元は受信側にリクエストを送信します。この利点は、呼び出し元がリクエストがどの受信者によって実行されるかを知る必要がないことです。この作業はコマンド オブジェクトを通じて簡単に実現できます。
コマンド オブジェクトには通常、次の部分が含まれている必要があります:
-
execute
メソッド。実際にコマンド操作を実行します。 -
undo
メソッドを使用すると、呼び出し元がコマンドをキャンセルする必要がある場合、このメソッドは受信者を元の状態に戻します。 -
redo
メソッドを使用すると、呼び出し側がコマンドをやり直す必要がある場合、このメソッドは受信側をコマンドの最後に実行した状態に戻します。
受信側は、ファイルの処理、データベース操作の実行など、特定の操作を実装します。呼び出し元は受信者にリクエストを行う責任がありますが、受信者と直接対話することはありません。コマンド オブジェクトは、呼び出し側と受信側の間のブリッジとして機能します。これにより、コマンドの特定の内容が呼び出し側と受信側から分離され、コマンドを保存、シリアル化、送信、または繰り返し実行できるようになります。
以下では、PHP のコマンド モードをさらに理解するために、具体的な例を使用します。
元に戻す操作とやり直し操作をサポートする単純なテキスト エディターを実装する必要があるとします。まず、抽象基本クラス Command を定義する必要があります。これは 3 つのメソッド execute
、undo
、redo
を宣言します。
abstract class Command { abstract public function execute(); abstract public function undo(); abstract public function redo(); }
次に、ファイルを開く、ファイルを保存する、テキストを削除するなどの特定のコマンドを実装する必要があります。
class OpenFileCommand extends Command { public function __construct(FileReceiver $receiver) { $this->receiver = $receiver; } public function execute() { $this->receiver->openFile(); } public function undo() { $this->receiver->closeFile(); } public function redo() { $this->execute(); } } class SaveFileCommand extends Command { public function __construct(FileReceiver $receiver) { $this->receiver = $receiver; } public function execute() { $this->receiver->saveFile(); } public function undo() { // No need to implement } public function redo() { $this->execute(); } } class DeleteTextCommand extends Command { public function __construct(TextReceiver $receiver) { $this->receiver = $receiver; } public function execute() { $this->receiver->deleteText(); } public function undo() { $this->receiver->insertText(); } public function redo() { $this->execute(); } }
受信側は、ファイルを開く、ファイルを保存する、テキストを削除するなどの特定の操作を実装します。
class FileReceiver { public function openFile() { // Open file } public function closeFile() { // Close file } public function saveFile() { // Save file } } class TextReceiver { private $text = ''; public function insertText($text) { $this->text .= $text; } public function deleteText() { $this->text = substr($this->text, 0, -1); } public function getText() { return $this->text; } }
最後に、受信者にリクエストを送信するためのデバイスを実装する必要があります。
class Invoker { private $commands = []; private $current = 0; public function addCommand(Command $command) { array_splice($this->commands, $this->current); $this->commands[] = $command; $command->execute(); $this->current++; } public function undo() { if ($this->current > 0) { $this->current--; $command = $this->commands[$this->current]; $command->undo(); } } public function redo() { if ($this->current < count($this->commands)) { $command = $this->commands[$this->current]; $command->redo(); $this->current++; } } }
テキスト エディタを使用する場合、Invoker を使用してコマンドを追加したり元に戻したりすることができます。これにより、後続の操作のためにコマンドの履歴が保持されます。例:
$invoker = new Invoker(); // Open file $invoker->addCommand(new OpenFileCommand(new FileReceiver())); // Type 'Hello' $textReceiver = new TextReceiver(); $textReceiver->insertText('Hello'); $invoker->addCommand(new DeleteTextCommand($textReceiver)); // Save file $invoker->addCommand(new SaveFileCommand(new FileReceiver())); // Undo $invoker->undo(); // Redo $invoker->redo();
上記のコードに示すように、最初にファイルを開くコマンドを実行し、次にテキストを削除するコマンドを追加し、コマンドを実行して、ファイル コマンドを保存します。最後に、Invoker を使用します。操作を元に戻して繰り返します。操作を実行します。
要約すると、PHP のコマンド パターンは、リクエストをカプセル化し、受信者と呼び出し元から分離するのに役立ち、アプリケーションをよりモジュール化して拡張しやすくします。さまざまなコマンド オブジェクトを作成するだけで、アプリケーションに新しい機能を簡単に追加できます。テキスト エディターでも他のアプリケーションでも、PHP のコマンド パターンは非常に便利なデザイン パターンです。
以上がPHPのコマンドパターンとその応用方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットトピック









MicrosoftStore は、Windows 用の信頼できるゲームやアプリをダウンロードできる便利なプラットフォームです。 Windows を更新したり、アプリケーションを誤って更新したりすると、Microsoft Store でエラー コード 0x80073D02 が発生することがあります。このエラーにより、Microsoft Store を開けなくなったり、アプリを更新できなくなったりすることがあります。これはユーザーにとって迷惑な経験です。このエラーを解決する方法を見てみましょう。方法 1: Windows ストア キャッシュをリセットする キャッシュ内の破損したエントリも問題を引き起こす可能性があり、エラー コード 0x80073D02 が発生する可能性があります。やってみよう

Windows 11 はいくつかの大きな変更をもたらし、その多くは世界中のユーザーに広く受け入れられました。 Windows 11 と Windows 10 はデュアルブートできますが、他のオペレーティング システムではどうなるでしょうか? Windows 11 はさまざまなオペレーティング システムで使用でき、必要に応じて Windows 11 と Linux をデュアルブートできます。 Windows と macOS をデュアルブートできますか? という質問がよくあります。答えは「はい」です。 macOS に関しても、状況は変わりません。 macOS と Windows をデュアルブートして、Windows ソフトウェアを使用したり、Mac でゲームをプレイしたりできます。 PC で macOS を試すためにデュアル ブートを使用する人もいるかもしれません。デュアルブートWin

コピーは、ファイルの保存と共有に常に優れた方法です。これにより、手動バックアップの作成、単純な転送の実行、さらにはコピーしないと元のファイルに損傷を与える可能性のある変更を加えることができます。ただし、Windows PC でクリップボードを使用する際に問題が発生した場合、これが困難になる場合があります。一部の Windows 11 ユーザーは最近、システムでコピー&ペーストを使用できなくなりました。この問題はさまざまな理由で発生する可能性がありますが、同じ状況にある場合は、PC で修正できます。 Windows 11 でコピー&ペーストを修正する方法 Windows ではコピー&ペーストが誤動作する原因となる問題が数多くあるため、この問題を解決するための最も一般的な解決策を以下にリストします。最初のものから始めることをお勧めします

PHP アプリケーションでは、現在の日付をファイル名として使用してファイルを保存またはアップロードする必要がある場合があります。日付を手動で入力することもできますが、現在の日付をファイル名として使用する方が便利で、速く、正確です。 PHP では、date() 関数を使用して現在の日付を取得できます。この関数の使用方法は次のとおりです: date(format, timestamp); ここで、format は日付フォーマット文字列、timestamp は日付と時刻を表すタイムスタンプです。このパラメータが渡されない場合は、それが使用されます。

PC に最新のオペレーティング システムをインストールした後の主な作業は、Windows 11 のライセンス認証です。 Windows 11 オペレーティング システムの真の可能性を解放するだけでなく、迷惑な「Windows 11 のライセンス認証を行ってください」というメッセージも削除されます。ただし、一部のユーザーにとって、Windows 11 ライセンス認証エラー 0xc004f074 はライセンス認証のスムーズな進行を妨げます。このバグにより、ユーザーは Windows 11 をアクティブ化できなくなり、機能が制限されたオペレーティング システムの使用が強制されるようです。 Windows 11 ライセンス認証エラー コード 0xc004f074 は、キー マネージメント サービスに関連しています。 KMS が利用できない場合、この問題が発生します。さて、このチュートリアルはこれで終わりです

チュートリアル: Firebase Cloud Messaging を使用して、スケジュールされたメッセージ プッシュ機能を PHP アプリケーションに実装する 概要 Firebase Cloud Messaging (FCM) は、Google が提供する無料のメッセージ プッシュ サービスで、開発者が Android、iOS、および Web アプリケーションにリアルタイム メッセージを送信するのに役立ちます。このチュートリアルでは、FCM を使用して、PHP アプリケーションを通じてスケジュールされたメッセージ プッシュ機能を実装します。ステップ 1: Firebase プロジェクトを作成する まず、F で

1. ジェネリック プログラミングとは何ですか? ジェネリック プログラミングとは、プログラミング言語で共通のデータ型を実装し、このデータ型をさまざまなデータ型に適用できるようにすることで、コードの再利用と効率化を実現することを指します。 PHP は動的型付け言語ですが、C++、Java、その他の言語のような強力な型メカニズムがないため、PHP で汎用プログラミングを実装するのは簡単ではありません。 2. PHP でのジェネリック プログラミング PHP でジェネリック プログラミングを実装するには、インターフェイスを使用する方法とトレイトを使用する方法の 2 つがあります。インターフェイスを使用して PHP でインターフェイスを作成する

Redis は、文字列、ハッシュ テーブル、リスト、セット、順序付きセットなどを含むさまざまなデータ構造をサポートする高性能のキー/値ストレージ システムです。同時に、Redis は文字列データに対する正規表現の一致および置換操作もサポートしているため、PHP アプリケーションの開発において柔軟性が高く便利です。 PHP アプリケーションで正規表現操作に Redis を使用するには、まず phpredis 拡張機能をインストールする必要があります。この拡張機能は、Redis サーバーと通信する方法を提供します。
