public function runCustomLogic() { $originator = new Originator(); //Setting state to State1 $originator->setState('State1'); //Setting state to State2 $originator->setState('State2'); //Saving State2 to Memento $this->saveToHistory($originator->getStateAsMemento()); //Setting state to State3 $originator->setState('State3'); // We can request multiple mementos, and choose which one to roll back to. // Saving State3 to Memento $this->saveToHistory($originator->getStateAsMemento()); //Setting state to State4 $originator->setState('State4'); $originator->restoreFromMemento($this->getFromHistory(1)); //State after restoring from Memento: State3 return $originator->getStateAsMemento()->getState(); }