我有以下 PHP 代码作为责任链,我使用的是 PHP5.4.9。
abstract class Logger
{
protected $next;
public function next($next)
{
$this->next = $next;
return $this->next;
}
public function run(){
$this->invoke();
if(null!=$this->next){
$this->next->invoke();
}
}
abstract public function invoke();
}
class EmailLogger extends Logger
{
public function invoke()
{
print_r("email\n");
}
}
class DatabaseLogger extends Logger
{
public function invoke()
{
print_r("database\n");
}
}
class FileLogger extends Logger
{
public function invoke()
{
print_r("file \n");
}
}
$logger = new EmailLogger();
$logger->next(new DatabaseLogger())->next(new FileLogger());
$logger->run();
预期输出是:
email
database
file
但实际输出:
email
database
我希望通过 PHP 语言实现责任链设计模式,一个抽象类和三个或更多类作为一个链来做某事。但只有前两个对象有效。
有什么遗漏吗?还是PHP5.4.9下不能使用这种编码风格?
谢谢。