日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php yii 命令行,命令行模式(Command)

發布時間:2024/9/27 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php yii 命令行,命令行模式(Command) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

命令行模式(Command)

3.2.1. 目的

為了封裝調用和解耦。

我們有一個調用程序和一個接收器。 這種模式使用「命令行」將方法調用委托給接收器并且呈現相同的「執行」方法。 因此,調用程序只知道調用「執行」去處理客戶端的命令。接收器會從調用程序中分離出來。

這個模式的另一面是取消方法的 execute(),也就是 undo() 。命令行也可以通過最小量的復制粘貼和依賴組合(不是繼承)被聚合,從而組合成更復雜的命令集。

3.2.2. 例子

文本編輯器:所有事件都是可以被解除、堆放,保存的命令。

Symfony2:SF2 命令可以從 CLI 運行,它的建立只需考慮到命令行模式。

大型 CLI 工具使用子程序來分發不同的任務并將它們封裝在「模型」中,每個模塊都可以通過命令行模式實現(例如:vagrant)。

3.2.3. UML 圖

3.2.4. Code

你也可以在GitHub上查看?源碼

CommandInterface.php

namespace DesignPatterns\Behavioral\Command;

interface CommandInterface

{

/**

* 這是在命令行模式中很重要的方法,

* 這個接收者會被載入構造器

*/

public function execute();

}

HelloCommand.php

namespace DesignPatterns\Behavioral\Command;

/**

* 這個具體命令,在接收器上調用 "print" ,

* 但是外部調用者只知道,這個是否可以執行。

*/

class HelloCommand implements CommandInterface

{

/**

* @var Receiver

*/

private $output;

/**

* 每個具體的命令都來自于不同的接收者。

* 這個可以是一個或者多個接收者,但是參數里必須是可以被執行的命令。

*

* @param Receiver $console

*/

public function __construct(Receiver $console)

{

$this->output = $console;

}

/**

* 執行和輸出 "Hello World".

*/

public function execute()

{

// 有時候,這里沒有接收者,并且這個命令執行所有工作。

$this->output->write('Hello World');

}

}

Receiver.php

namespace DesignPatterns\Behavioral\Command;

/**

* 接收方是特定的服務,有自己的 contract ,只能是具體的實例。

*/

class Receiver

{

/**

* @var bool

*/

private $enableDate = false;

/**

* @var string[]

*/

private $output = [];

/**

* @param string $str

*/

public function write(string $str)

{

if ($this->enableDate) {

$str .= ' ['.date('Y-m-d').']';

}

$this->output[] = $str;

}

public function getOutput(): string

{

return join("\n", $this->output);

}

/**

* 可以顯示消息的時間

*/

public function enableDate()

{

$this->enableDate = true;

}

/**

* 禁止顯示消息的時間

*/

public function disableDate()

{

$this->enableDate = false;

}

}

Invoker.php

namespace DesignPatterns\Behavioral\Command;

/**

*調用者使用這種命令。

* 比例 : 一個在 SF2 中的應用

*/

class Invoker

{

/**

* @var CommandInterface

*/

private $command;

/**

* 在這種調用者中,我們發現,訂閱命令也是這種方法

* 還包括:堆棧、列表、集合等等

*

* @param CommandInterface $cmd

*/

public function setCommand(CommandInterface $cmd)

{

$this->command = $cmd;

}

/**

* 執行這個命令;

* 調用者也是用這個命令。

*/

public function run()

{

$this->command->execute();

}

}

3.2.5. Test

Tests/CommandTest.php

namespace DesignPatterns\Behavioral\Command\Tests;

use DesignPatterns\Behavioral\Command\HelloCommand;

use DesignPatterns\Behavioral\Command\Invoker;

use DesignPatterns\Behavioral\Command\Receiver;

use PHPUnit\Framework\TestCase;

class CommandTest extends TestCase

{

public function testInvocation()

{

$invoker = new Invoker();

$receiver = new Receiver();

$invoker->setCommand(new HelloCommand($receiver));

$invoker->run();

$this->assertEquals('Hello World', $receiver->getOutput());

}

}

總結

以上是生活随笔為你收集整理的php yii 命令行,命令行模式(Command)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。