} } class SecondState implements State { public function execute(Troll $troll) { if ($troll->isSecondState()) { $troll->second(); } } } class ThirdState implements State { public function execute(Troll $troll) { if ($troll->isThirdState()) { $troll->third(); } } } $uid = 10001; $troll = new Troll($uid); $firstState = new FirstState(); $troll->changeState($firstState); $troll->Update(); $secondState = new SecondState(); $troll->changeState($secondState); $troll->Update(); $thirdState = new ThirdState(); $troll->changeState($thirdState); $troll->Update();