public function testChainOfResponsibility() { $expect = "Im handler 2"; $handlers = new ConcreteHandlerA(); $handlers->addHandler(new ConcreteHandlerB())->addHandler(new ConcreteHandlerC()); $result = $handlers->sendRequest(2); $this->assertEquals($result, $expect); }
class ConcreteHandlerA extends AbstractHandler { public function sendRequest($message) { if ($message == 1) { echo __CLASS__ . "process this message"; } else { if ($this->getNext()) { $this->getNext()->sendRequest($message); } } } } class ConcreteHandlerB extends AbstractHandler { public function sendRequest($message) { if ($message == 2) { echo __CLASS__ . "process this message"; } else { if ($this->getNext()) { $this->getNext()->sendRequest($message); } } } } $handler = new ConcreteHandlerA(); $handler->setNext(new ConcreteHandlerB()); //$handler->getNext()->setNext(...); $handler->sendRequest(1); $handler->sendRequest(2);