Files
DesignPatternsPHP/Behavioral/ChainOfResponsibilities/Handler.php
2016-09-22 12:17:22 +02:00

44 lines
1.0 KiB
PHP

<?php
namespace DesignPatterns\Behavioral\ChainOfResponsibilities;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
abstract class Handler
{
/**
* @var Handler|null
*/
private $successor = null;
public function __construct(Handler $handler = null)
{
$this->successor = $handler;
}
/**
* This approach by using a template method pattern ensures you that
* each subclass will not forget to call the successor
*
* @param RequestInterface $request
*
* @return string|null
*/
final public function handle(RequestInterface $request)
{
$processed = $this->processing($request);
if ($processed === null) {
// the request has not been processed by this handler => see the next
if ($this->successor !== null) {
$processed = $this->successor->handle($request);
}
}
return $processed;
}
abstract protected function processing(RequestInterface $request);
}