私は責任の連鎖として次の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言語による責任設計パターンのチェーン、1つの抽象クラス、および3つ以上のクラスを実装して、チェーンとして何かを実行したいと考えています。ただし、最初の2つのオブジェクトのみが機能します。
足りないものはありますか?または、PHPはPHP5.4.9ではこのコーディングスタイルを使用できませんか?
ありがとう。