主頁 > 知識庫 > PHP使用觀察者模式處理異常信息的方法詳解

PHP使用觀察者模式處理異常信息的方法詳解

熱門標(biāo)簽:辦理重慶400電話 沛縣400電話辦理 德陽中江如何申請400開頭電話 青白江地圖標(biāo)注 銅川電話機(jī)器人價(jià)格 智能電話機(jī)器人好公司門薩維 江蘇電商外呼系統(tǒng)運(yùn)營商 聊城電話外呼系統(tǒng)公司 AI電話機(jī)器人OEM貼牌

本文實(shí)例講述了PHP使用觀察者模式處理異常信息的方法。分享給大家供大家參考,具體如下:

異常信息的捕獲對編程測試有著重要的意義,這里結(jié)合觀察者模式,探索如何處理異常信息。

關(guān)于觀察者模式,如果還沒有接觸過的話,博客園有很多優(yōu)秀的博友做了詳細(xì)的 解釋。筆者覺得,所謂觀察者模式,必須有兩個(gè)重要組成部分:一個(gè)主題對象,多個(gè)觀察者。在使用的時(shí)候,我們可以將觀察者像插頭一樣插到主題對象這個(gè)插座上,利用主題對象完成相應(yīng)功能。

既然觀察者要作為插頭,必須要有一個(gè)統(tǒng)一的口徑才能插到相同的插座上,因而先定義一個(gè)接口,Exception_Observer.php:

?php
/**
 * 定義的規(guī)范
 */
interface Exception_Observer{
  public function update(Observer_Exception $e);
}
?>

相對于眾多觀察者,我們首先應(yīng)該關(guān)注唯一的主題對象,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);
    }
  }
}

我們可以清楚地看到,靜態(tài)變量$_observers用來放置插入的觀察者,notify()用來通知所有觀察者對象。

這里需要注意 $observer->update($this); 里面 $this 的用法,很多初學(xué)者會(huì)感到“原來 $this 也可以這么用啊”。

一個(gè)小問題: $_observers 不是靜態(tài)變量可不可以? 這個(gè)問題我們后面回答。

定義兩個(gè)觀察者,原則上實(shí)現(xiàn)接口所定義的功能。

Email_Exception_Observer.php:

class Emailing_Exception_Observer implements Exception_Observer{
  protected $_email="huanggbxjp@sohu.com";
  function __construct($email=null)
  {
    if ($email!==nullfilter_var($email,FILTER_VALIDATE_EMAIL)) {
      $this->_email=$email;
    }
  }
  public function update(Observer_Exception $e){
    $message="時(shí)間".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!==nullis_string($filename)) {
      $thvis->_filename=$filename;
    }
  }
  public function update(Observer_Exception $e){
    $message="時(shí)間".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);
  }
}

設(shè)計(jì)完所有該有的主體對象和插件,我們做個(gè)小小的測試:

?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 "我是自定義的方法處理這個(gè)異常";
  }
}
try {
  throw new MyException("出現(xiàn)異常,記錄一下");
} catch (MyException $e) {
  echo $e->getMessage();
  echo "ht/>";
}
?>

本實(shí)例首先先加載觀察者,其后進(jìn)行其他操作。回到上面提出的問題, $_observers 可以不是靜態(tài)變量嗎?答案是不可以。如果 $_observers 不是靜態(tài)變量,加載觀察者的行為對后續(xù)操作沒有影響。static讓所有實(shí)例成員共享某個(gè)變量。即便類繼承也同樣有效。有興趣的可以繼續(xù)探索下static的神奇作用吧。

本例顯示輸出與一般情況無異,但不同的是已在自定義的文件下生成了相應(yīng)的日志。雖然最后實(shí)現(xiàn)的功能再簡單不過,很多人甚至可以用更少的代碼更簡單的方法實(shí)現(xiàn),但是,在實(shí)現(xiàn)更加復(fù)雜系統(tǒng)的情況下,觀察者模式給我們帶來很大方便。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • PHP設(shè)計(jì)模式之觀察者模式入門與應(yīng)用案例詳解
  • PHP 觀察者模式深入理解與應(yīng)用分析
  • php模式設(shè)計(jì)之觀察者模式應(yīng)用實(shí)例分析
  • php設(shè)計(jì)模式之觀察者模式定義與用法經(jīng)典示例
  • PHP中常用的三種設(shè)計(jì)模式詳解【單例模式、工廠模式、觀察者模式】
  • PHP觀察者模式實(shí)例分析【對比JS觀察者模式】
  • PHP設(shè)計(jì)模式之觀察者模式定義與用法分析
  • PHP觀察者模式定義與用法實(shí)例分析
  • 解析PHP觀察者模式Observer

標(biāo)簽:赤峰 三亞 濟(jì)寧 迪慶 烏魯木齊 南寧 山南 鷹潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP使用觀察者模式處理異常信息的方法詳解》,本文關(guān)鍵詞  PHP,使用,觀察者,模式,處理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP使用觀察者模式處理異常信息的方法詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP使用觀察者模式處理異常信息的方法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章