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);
{ public function sendRequest($message) { if ($message == 1) { echo __CLASS__ . " handles this request" . PHP_EOL; } else { if ($this->getNext()) { $this->getNext()->sendRequest($message); } } } } class ConcreteHandlerB extends AbstractHandler { public function sendRequest($message) { if ($message == 2) { echo __CLASS__ . " handles this request" . PHP_EOL; } else { if ($this->getNext()) { $this->getNext()->sendRequest($message); } } } } $handler = new ConcreteHandlerA(); $handler2 = new ConcreteHandlerB(); $handler->setNext($handler2); $handler->sendRequest(1); $handler->sendRequest(2); $handler->getNext();