


Penjelasan terperinci tentang corak arahan dalam PHP dan kaedah aplikasinya
Jun 08, 2023 pm 05:12 PMCorak arahan ialah corak reka bentuk yang merangkum permintaan ke dalam objek, membolehkan anda membuat parameter klien dengan permintaan, baris gilir atau log permintaan yang berbeza dan menyokong operasi yang boleh dibuat asal. Idea teras corak ini adalah untuk memisahkan tingkah laku yang diminta oleh klien daripada tingkah laku pelaksanaan. Mod arahan dalam PHP digunakan secara meluas dalam sistem yang perlu merekod log aplikasi, dan sistem yang perlu melaksanakan perintah sejarah secara dinamik.
Komponen teras corak arahan termasuk arahan, penerima dan pemanggil. Objek arahan membawa permintaan dan parameter operasi klien Penerima ialah objek yang benar-benar melaksanakan permintaan ini, dan pemanggil menghantar permintaan kepada penerima. Kelebihan ini ialah pemanggil tidak perlu mengetahui penerima mana permintaan akan dilakukan, kerja ini boleh dicapai dengan mudah melalui objek arahan.
Objek arahan biasanya perlu mengandungi bahagian berikut: kaedah
-
execute
, yang sebenarnya akan melaksanakan operasi arahan. Kaedah -
undo
, apabila pemanggil perlu membatalkan arahan, kaedah ini akan memulihkan penerima kepada keadaan asal. Kaedah -
redo
, apabila pemanggil perlu membuat semula arahan, kaedah ini akan memulihkan penerima kepada keadaan pelaksanaan terakhir arahan.
Penerima melaksanakan operasi tertentu, seperti memproses fail, melaksanakan operasi pangkalan data, dsb. Pemanggil bertanggungjawab untuk membuat permintaan kepada penerima, tetapi tidak berinteraksi secara langsung dengan penerima. Objek arahan bertindak sebagai jambatan antara pemanggil dan penerima. Ia memisahkan kandungan khusus arahan daripada pemanggil dan penerima, membolehkan arahan disimpan, bersiri, dihantar atau dilaksanakan berulang kali.
Di bawah ini kami akan menggunakan contoh khusus untuk memahami lebih lanjut mod arahan dalam PHP.
Andaikan kita perlu melaksanakan editor teks ringkas yang menyokong operasi buat asal dan buat semula. Pertama, kita perlu mentakrifkan Perintah kelas asas abstrak, yang akan mengisytiharkan tiga kaedah execute
, undo
dan redo
.
abstract class Command { abstract public function execute(); abstract public function undo(); abstract public function redo(); }
Kemudian, kita perlu melaksanakan arahan khusus, seperti membuka fail, menyimpan fail dan memadamkan teks.
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(); } }
Penerima melaksanakan operasi tertentu, seperti membuka fail, menyimpan fail dan memadam teks.
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; } }
Akhir sekali, kami perlu melaksanakan peranti untuk menghantar permintaan kepada penerima.
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++; } } }
Apabila menggunakan editor teks, kita boleh menggunakan Invoker untuk menambah dan membuat asal arahan, yang akan mengekalkan sejarah arahan untuk operasi seterusnya. Contohnya:
$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();
Seperti yang ditunjukkan dalam kod di atas, kami mula-mula melaksanakan arahan untuk membuka fail, kemudian menambah arahan untuk memadam teks, melaksanakan arahan dan menyimpan arahan fail Akhirnya, kami menggunakan Invoker untuk membatalkan operasi dan membuat semula operasi.
Ringkasnya, corak arahan dalam PHP boleh membantu kami merangkum permintaan dan memisahkannya daripada penerima dan pemanggil, menjadikan aplikasi lebih modular dan mudah diperluaskan. Kami boleh menambah fungsi baharu pada aplikasi kami dengan mudah hanya dengan mencipta objek arahan yang berbeza. Sama ada editor teks atau aplikasi lain, corak arahan dalam PHP ialah corak reka bentuk yang sangat berguna.
Atas ialah kandungan terperinci Penjelasan terperinci tentang corak arahan dalam PHP dan kaedah aplikasinya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana untuk menyelesaikan kod ralat Microsoft Store 0x80073D02?
![Cara untuk dwi-but Windows 11 dan macOS [Panduan Lengkap]](https://img.php.cn/upload/article/000/000/164/168146628429366.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Cara untuk dwi-but Windows 11 dan macOS [Panduan Lengkap]

Bagaimana untuk membetulkan masalah salin dan tampal fungsi Windows 11 yang tidak bertindak balas?

Aplikasi PHP: gunakan tarikh semasa sebagai nama fail

Selesaikan kod ralat 0xc004f074 apabila mengaktifkan Windows 11.

Tutorial: Gunakan Pemesejan Awan Firebase untuk melaksanakan fungsi tolak mesej berjadual dalam aplikasi PHP

Pengaturcaraan generik dalam PHP dan aplikasinya

Cara memasang kemas kini Windows 10/11 secara manual menggunakan PowerShell
