<?php
/*
* 用一个类来装饰另一个类,动态的给一个对象增加一些额外功能,这些功能一般是在这个对象调用方法前或方法后
* 比如我们要给User类增加一个登陆日志的功能
*/
// 抽象构件
abstract class Component
{
abstract public function login($time);
}
// user类
class User extends Component
{
private $login_time;
public function login($time)
{
$this->login_time = $time;
}
}
// 装饰器
class LogDecorate extends Component
{
private $user;
private $time;
/**
* Log constructor.
*/
public function __construct(User $user)
{
$this->user = $user;
}
public function login($time)
{
$this->user->login($time);
$this->log($time);
}
public function log($time)
{
echo sprintf("Log: login %d",$time) . PHP_EOL;
}
}
$user = new User();
$log = new LogDecorate($user);
$log->login(time());