PHP备忘录源码是一种用于记录和存储信息的软件,它可以帮助用户记录重要的信息,并且可以在需要时随时查看。它可以帮助用户更好地组织和管理信息,并且可以有效地减少重复工作。
PHP备忘录源码的核心代码如下:
// 创建一个新的备忘录对象 $memo = new Memo(); // 添加一条新的备忘录 $memo->addMemo('Remember to buy milk'); // 获取所有备忘录 $allMemos = $memo->getAllMemos(); // 删除一条备忘录 $memo->deleteMemo('Remember to buy milk');
它提供了将对象恢复到之前状态(通过回滚撤销)或访问对象状态的能力,而不需要揭示它的实现(对象不需要具有返回当前状态的函数)。
memento模式由三个对象实现:Originator, Caretaker, Memento。
Memento – 包含任何对象或资源状态的具体唯一快照的对象:字符串、数字、数组、类的实例等。 这种情况下的唯一性并不意味着禁止在不同的快照中存在相似的状态。 这意味着可以将状态提取为独立克隆。 存储在 Memento 中的任何对象都应该是原始对象的完整副本,而不是对原始对象的引用。 Memento 对象是一个“不透明对象”(没有人可以或不应该更改的对象)。
Originator—它是一个包含外部对象实际状态的对象,是严格指定的类型。Originator能够创建此状态的唯一副本,并将其包裹在Memento中返回。 Originator不知道变化的历史。 您可以从外部将具体状态设置为Originator,这将被视为实际状态。 Originator必须确保给定的状态对应于允许的对象类型。Originator可能(但不应该)有任何方法,但他们不能对保存的对象状态进行更改。
Caretaker控制着状态的历史。 他可以对一个对象进行更改; 决定在Originator中保存外部对象的状态;从当前状态的Originator快照中询问; 或将Originator状态设置为与历史记录中的某些快照等效。
Memento.php
<?php declare(strict_types=1); namespace DesignPatternsBehavioralMemento; class Memento { public function __construct(private State $state) { } public function getState(): State { return $this->state; } }
State.php
<?php declare(strict_types=1); namespace DesignPatternsBehavioralMemento; use InvalidArgumentException; class State implements Stringable { public const STATE_CREATED = "created"; public const STATE_OPENED = "opened"; public const STATE_ASSIGNED = "assigned"; public const STATE_CLOSED = "closed"; private string $state; private static array $validStates = [ self::STATE_CREATED, self::STATE_OPENED, self::STATE_ASSIGNED, self::STATE_CLOSED, ]; public function __construct(string $state) { self::ensureIsValidState($state); $this->state = $state; } private static function ensureIsValidState(string $state) { if (!in_array($state, self::$validStates)) { throw new InvalidArgumentException("Invalid state given"); } } public function __toString(): string { return $this->state; } }
Ticket.php
<?php declare(strict_types=1); namespace DesignPatternsBehavioralMemento; class Ticket { private State $currentState; public function __construct() { $this->currentState = new State(State::STATE_CREATED); } public function open() { $this->currentState = new State(State::STATE_OPENED); } public function assign() { $this->currentState = new State(State::STATE_ASSIGNED); } public function close() { $this->currentState = new State(State::STATE_CLOSED); } public function saveToMemento(): Memento { return new Memento(clone $this->currentState); } public function restoreFromMemento(Memento $memento) { $this->currentState = $memento->getState(); } public function getState(): State { return $this->currentState; } }
Tests/MementoTest.php
<?php declare(strict_types=1); namespace DesignPatternsBehavioralMementoTests; use DesignPatternsBehavioralMementoState; use DesignPatternsBehavioralMementoTicket; use PHPUnitFrameworkTestCase; class MementoTest extends TestCase { public function testOpenTicketAssignAndSetBackToOpen() { $ticket = new Ticket(); // open the ticket $ticket->open(); $openedState = $ticket->getState(); $this->assertSame(State::STATE_OPENED, (string) $ticket->getState()); $memento = $ticket->saveToMemento(); // assign the ticket $ticket->assign(); $this->assertSame(State::STATE_ASSIGNED, (string) $ticket->getState()); // now restore to the opened state, but verify that the state object has been cloned for the memento $ticket->restoreFromMemento($memento); $this->assertSame(State::STATE_OPENED, (string) $ticket->getState()); $this->assertNotSame($openedState, $ticket->getState()); } }
所有方法都扩展自Moralis.SolanaAPI.accountbalance返回地址的SOL余额。选项:network:要从中获取数据的网络集群。有效...
检查仪表板中的错误日志对于任何Moralis问题,首先要检查的是仪表板中的日志部分。未捕获错误:未启用以太坊的浏览器确保您的浏...
在安装ZooKeeper之前,请确保你的系统是在以下任一操作系统上运行:任意Linux OS- 支持开发和部署。适合演示应用程序。 Windows ...
Kafka在“org.apache.kafka.tools。"下打包的工具。 工具分为系统工具和复制工具。系统工具可以使用运行类脚本从命令行运行系统...
首先让我们开始实现单节点单代理配置,然后我们将我们的设置迁移到单节点多代理配置。希望你现在可以在你的机器上安装 Java,Zoo...