/** * @author v.r And * * @example * 適配器 * 適配器設計模式只是將某個對象的接口適配爲另外一個對象所指望的接口 * 列子: * 以日誌管理爲例子 * * @copyright copyright information * */ class errorObject { private $error; public function __construct($error) { $this->error = $error; } public function getError() { return $this->error; } } /** * * @example * 輸出日誌到控制檯 * */ class logToConsole { private $errorObject; public function __construct($errorObject) { $this->errorObject = $errorObject; } /** * write() 方法中就隨便你操做了,顯示到控制器中 */ public function write() { echo "I write To Console : ".$this->errorObject->getError(); } } $error = new errorObject("404 Not Found"); $log = new logToConsole($error); $log->write(); echo "--------------------------------------------------------\n"; /** * @example * 輸出到CSV中 */ class logToCSV { const CSV_LOCATION = 'log.csv'; private $errorObject; public function __construct($errorObject) { $this->errorObject = $errorObject; } /** * write() 方法中 * 調用 errorObject類中 * getErrorNumber 方法 * getErrorText 方法 * 問題: errorObject中類中並無此方法 */ public function write() { echo "I write To CSV : \n"; echo "errorNumber : " . $this->errorObject->getErrorNumber() ."\n"; echo "errorText : " . $this->errorObject->getErrorText()."\n"; } } /** * @example * 適配器 */ class logToCSVAdapter extends errorObject { private $errorNo; private $errorMsg; public function __construct($error) { parent :: __construct($error); $parts = explode(':', $this->getError()); $this->errorNo = $parts[0]; $this->errorMsg =$parts[1]; } public function getErrorNumber() { return $this->errorNo; } public function getErrorText() { return $this->errorMsg; } } $error = new logToCSVAdapter("404 : Not Found"); $log = new logToCSV($error); $log->write(); echo "--------------------------------------------------------\n";