<?php// 装饰模式function echoLine($msg) { echo $msg, '<br/>'; }class RequestHelper{ /** * return class resource id */ public function __toString() { ob_start(); var_dump($this); $str = ob_get_clean(); if (PReg_match('/object/(' . __CLASS__ . '/)/#/d+/', $str, $matches)) { return $matches[0]; } return __CLASS__; }}// ---------------------------------------------------------interface ProcessRequest{ public function process(RequestHelper $req);}/** * http request */class HttpRequest implements ProcessRequest{ public function process(RequestHelper $req) { echoLine('Process http request[' . $req . ']'); }}/** * Log Decorator * add log function */class LogRequest implements ProcessRequest{ protected $pr; public function __construct(ProcessRequest $pr) { $this->pr = $pr; } public function process(RequestHelper $req) { echoLine('Add log function!'); $this->pr->process($req); }}/** * Authenticate Decorator * add authenticate function */class AuthenticateRquest implements ProcessRequest{ protected $pr; public function __construct(ProcessRequest $pr) { $this->pr = $pr; } public function process(RequestHelper $req) { echoLine('Add authenticate function!'); $this->pr->process($req); }}// test code$req = new RequestHelper();$process = new HttpRequest();// add log$process = new LogRequest($process);// add auth$process = new AuthenticateRquest($process);// process request$process->process($req);
新闻热点
疑难解答