时间:2021-07-01 10:21:17 帮助过:25人阅读
<?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);
以上就是详解PHP装饰模式的示例代码的详细内容,更多请关注Gxl网其它相关文章!