您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何在PHP中利用觀察者模式處理異常信息,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
異常信息的捕獲對編程測試有著重要的意義,這里結合觀察者模式,探索如何處理異常信息。
關于觀察者模式,如果還沒有接觸過的話,博客園有很多優秀的博友做了詳細的 解釋。筆者覺得,所謂觀察者模式,必須有兩個重要組成部分:一個主題對象,多個觀察者。在使用的時候,我們可以將觀察者像插頭一樣插到主題對象這個插座上,利用主題對象完成相應功能。
既然觀察者要作為插頭,必須要有一個統一的口徑才能插到相同的插座上,因而先定義一個接口,Exception_Observer.php:
<?php /** * 定義的規范 */ interface Exception_Observer{ public function update(Observer_Exception $e); } ?>
相對于眾多觀察者,我們首先應該關注唯一的主題對象,Observer_Exception.php:
<?php class Observer_exception extends Exception{ public static $_observers=array(); public static function attach(Exception_Observer $observer){ self::$_observers[]=$observer; } public function __construct($message=null,$code=0){ parent::__construct($message,$code); $this->notify(); } public function notify(){ foreach (self::$_observers as $observer) { $observer->update($this); } } }
我們可以清楚地看到,靜態變量$_observers用來放置插入的觀察者,notify()用來通知所有觀察者對象。
這里需要注意 $observer->update($this);
里面 $this
的用法,很多初學者會感到“原來 $this
也可以這么用啊”。
一個小問題: $_observers
不是靜態變量可不可以? 這個問題我們后面回答。
定義兩個觀察者,原則上實現接口所定義的功能。
Email_Exception_Observer.php:
class Emailing_Exception_Observer implements Exception_Observer{ protected $_email="huanggbxjp@sohu.com"; function __construct($email=null) { if ($email!==null&&filter_var($email,FILTER_VALIDATE_EMAIL)) { $this->_email=$email; } } public function update(Observer_Exception $e){ $message="時間".date("Y-m-d H:i:s").PHP_EOL; $message.="信息".$e->getMessage().PHP_EOL; $message.="追蹤信息".$e->getTraceAsString().PHP_EOL; $message.="文件".$e->getFile().PHP_EOL; $message.="行號".$e->getLine().PHP_EOL; error_log($message,1,$this->_email); } }
Logging_Exception_Observer.php:
<?php class Logging_Exception_Observer implements Exception_Observer { protected $_filename="F:/logException.log"; function __construct($filename=null) { if ($filename!==null&&is_string($filename)) { $thvis->_filename=$filename; } } public function update(Observer_Exception $e){ $message="時間".date("Y-m-d H:i:s").PHP_EOL; $message.="信息".$e->getMessage().PHP_EOL; $message.="追蹤信息".$e->getTraceAsString().PHP_EOL; $message.="文件".$e->getFile().PHP_EOL; $message.="行號".$e->getLine().PHP_EOL; error_log($message,3,$this->_filename); } }
設計完所有該有的主體對象和插件,我們做個小小的測試:
<?php require 'Exception_Observer.php'; require 'Observer_Exception.php'; require 'Logging_Exception_Observer.php'; require 'Emailing_Exception_Observer.php'; Observer_Exception::attach(new Logging_Exception_Observer()); class MyException extends Observer_Exception{ public function test(){ echo 'this is a test'; } public function test1(){ echo "我是自定義的方法處理這個異常"; } } try { throw new MyException("出現異常,記錄一下"); } catch (MyException $e) { echo $e->getMessage(); echo "<ht/>"; } ?>
php是一個嵌套的縮寫名稱,是英文超級文本預處理語言,它的語法混合了C、Java、Perl以及php自創新的語法,主要用來做網站開發,許多小型網站都用php開發,因為php是開源的,從而使得php經久不衰。
關于如何在PHP中利用觀察者模式處理異常信息就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。