国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
使用觀察者模式處理異常信息,觀察者模式
首頁 後端開發(fā) php教程 使用觀察者模式處理異常信息,觀察者模式_PHP教程

使用觀察者模式處理異常信息,觀察者模式_PHP教程

Jul 13, 2016 am 09:44 AM
觀察者模式

使用觀察者模式處理異常信息,觀察者模式

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

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

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

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

  相對于眾多觀察者,我們首先應(yīng)該關(guān)注唯一的主題對象,Observer_Exception.php:

<?<span>php
</span><span>class</span> Observer_exception <span>extends</span> <span>Exception</span><span>{
    </span><span>public</span> <span>static</span> <span>$_observers</span>=<span>array</span><span>();
    </span><span>public</span> <span>static</span> <span>function</span> attach(Exception_Observer <span>$observer</span><span>){
        self</span>::<span>$_observers</span>[]=<span>$observer</span><span>;
    } 
    </span><span>public</span> <span>function</span> __construct(<span>$message</span>=<span>null</span>,<span>$code</span>=0<span>){
        parent</span>::__construct(<span>$message</span>,<span>$code</span><span>);
        </span><span>$this</span>-><span>notify();
    }
    </span><span>public</span> <span>function</span><span> notify(){
        </span><span>foreach</span> (self::<span>$_observers</span> <span>as</span> <span>$observer</span><span>) {
            </span><span>$observer</span>->update(<span>$this</span><span>);
        }
    }
}</span>

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

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

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

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

  Email_Exception_Observer.php:

<span>class</span> Emailing_Exception_Observer <span>implements</span><span> Exception_Observer{
    </span><span>protected</span> <span>$_email</span>="huanggbxjp@sohu.com"<span>;
    </span><span>function</span> __construct(<span>$email</span>=<span>null</span><span>)
    {
        </span><span>if</span> (<span>$email</span>!==<span>null</span>&&filter_var(<span>$email</span>,<span>FILTER_VALIDATE_EMAIL)) {
            </span><span>$this</span>->_email=<span>$email</span><span>;
        }
    }


    </span><span>public</span> <span>function</span> update(Observer_Exception <span>$e</span><span>){
        </span><span>$message</span>="時間".<span>date</span>("Y-m-d H:i:s").<span>PHP_EOL</span><span>;
        </span><span>$message</span>.="信息".<span>$e</span>->getMessage().<span>PHP_EOL</span><span>;
        </span><span>$message</span>.="追蹤信息".<span>$e</span>->getTraceAsString().<span>PHP_EOL</span><span>;
        </span><span>$message</span>.="文件".<span>$e</span>->getFile().<span>PHP_EOL</span><span>;
        </span><span>$message</span>.="行號".<span>$e</span>->getLine().<span>PHP_EOL</span><span>;
        </span><span>error_log</span>(<span>$message</span>,1,<span>$this</span>-><span>_email);
    }
}</span>

  Logging_Exception_Observer.php:

<?<span>php 
</span>
<span>class</span> Logging_Exception_Observer <span>implements</span><span> Exception_Observer
{
    </span><span>protected</span> <span>$_filename</span>="F:/logException.log"<span>;
    </span><span>function</span> __construct(<span>$filename</span>=<span>null</span><span>)
    {
        </span><span>if</span> (<span>$filename</span>!==<span>null</span>&&<span>is_string</span>(<span>$filename</span><span>)) {
            </span><span>$thvis</span>->_filename=<span>$filename</span><span>;
        }
    }


    </span><span>public</span> <span>function</span> update(Observer_Exception <span>$e</span><span>){
        </span><span>$message</span>="時間".<span>date</span>("Y-m-d H:i:s").<span>PHP_EOL</span><span>;
        </span><span>$message</span>.="信息".<span>$e</span>->getMessage().<span>PHP_EOL</span><span>;
        </span><span>$message</span>.="追蹤信息".<span>$e</span>->getTraceAsString().<span>PHP_EOL</span><span>;
        </span><span>$message</span>.="文件".<span>$e</span>->getFile().<span>PHP_EOL</span><span>;
        </span><span>$message</span>.="行號".<span>$e</span>->getLine().<span>PHP_EOL</span><span>;
        </span><span>error_log</span>(<span>$message</span>,3,<span>$this</span>-><span>_filename);
    }
}</span>

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

<?<span>php 

</span><span>require</span> 'Exception_Observer.php'<span>;
</span><span>require</span> 'Observer_Exception.php'<span>;
</span><span>require</span> 'Logging_Exception_Observer.php'<span>;
</span><span>require</span> 'Emailing_Exception_Observer.php'<span>;

Observer_Exception</span>::attach(<span>new</span><span> Logging_Exception_Observer());

</span><span>class</span> MyException <span>extends</span><span> Observer_Exception{

    </span><span>public</span> <span>function</span><span> test(){
        </span><span>echo</span> 'this is  a test'<span>;
    }
    </span><span>public</span> <span>function</span><span> test1(){

        </span><span>echo</span> "我是自定義的方法處理這個異常"<span>;
    }

}

</span><span>try</span><span> {
    </span><span>throw</span> <span>new</span> MyException("出現(xiàn)異常,記錄一下"<span>);    
} </span><span>catch</span> (MyException <span>$e</span><span>) {
    </span><span>echo</span> <span>$e</span>-><span>getMessage();
    </span><span>echo</span> "<ht/>"<span>;    
}
</span>?>

  本實例首先先加載觀察者,其后進行其他操作?;氐缴厦嫣岢龅膯栴},?$_observers?可以不是靜態(tài)變量嗎?答案是不可以。如果?$_observers?不是靜態(tài)變量,加載觀察者的行為對后續(xù)操作沒有影響。static讓所有實例成員共享某個變量。即便類繼承也同樣有效。有興趣的可以繼續(xù)探索下static的神奇作用吧?!?/p>

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

?

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1048766.htmlTechArticle使用觀察者模式處理異常信息,觀察者模式 異常信息的捕獲對編程測試有著重要的意義,這里結(jié)合觀察者模式,探索如何處理異常信息。...
本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在Phalcon框架中使用事件管理器(Event Manager)實作觀察者模式 如何在Phalcon框架中使用事件管理器(Event Manager)實作觀察者模式 Aug 02, 2023 pm 07:25 PM

如何在Phalcon框架中使用事件管理器(EventManager)實現(xiàn)觀察者模式簡介:事件管理器(EventManager)是Phalcon框架中強大且靈活的核心功能之一。透過使用事件管理器,您可以輕鬆實現(xiàn)觀察者模式,以便在應(yīng)用程式中實現(xiàn)物件之間的鬆散耦合。本文將為您介紹如何使用Phalcon框架中的事件管理器實作觀察者模式,並提供對應(yīng)的程式碼範(fàn)例。步驟一

PHP 設(shè)計模式:通往程式碼卓越的道路 PHP 設(shè)計模式:通往程式碼卓越的道路 Feb 21, 2024 pm 05:30 PM

導(dǎo)言PHP設(shè)計模式是一組經(jīng)過驗證的解決方案,用於解決軟體開發(fā)中常見的挑戰(zhàn)。透過遵循這些模式,開發(fā)者可以創(chuàng)建優(yōu)雅、健壯和可維護的程式碼。它們可協(xié)助開發(fā)者遵循SOLID原則(單一職責(zé)、開放-封閉、Liskov替換、介面隔離和依賴反轉(zhuǎn)),從而提高程式碼的可讀性、可維護性和可擴展性。設(shè)計模式的類型有許多不同的設(shè)計模式,每種模式都有其獨特的目的和優(yōu)點。以下是一些最常用的php設(shè)計模式:單例模式:確保一個類別只有一個實例,並提供一種全域存取此實例的方法。工廠模式:建立一個對象,而不指定其確切類別。它允許開發(fā)者根據(jù)條件

揭秘 PHP 設(shè)計模式的奧秘 揭秘 PHP 設(shè)計模式的奧秘 Feb 21, 2024 pm 01:19 PM

1.什麼是PHP設(shè)計模式? PHP設(shè)計模式是預(yù)先定義的程式碼模板,旨在解決常見的軟體開發(fā)問題。它們提供了經(jīng)過驗證的解決方案,可以提高程式碼的可重複使用性、可維護性和可擴充性。 2.PHP設(shè)計模式的類型php中有許多不同的設(shè)計模式,每種模式都有其特定的用途。最常見的模式包括:單例模式:確保一個類別只有一個實例。工廠模式:根據(jù)傳給它的資料建立不同類型的物件。策略模式:允許程式在運行時更改其行為。觀察者模式:允許物件訂閱事件並在事件發(fā)生時獲得通知。 3.單例模式範(fàn)例classSingleInstance{private

提升Java程式設(shè)計技能:掌握適配器模式與觀察者模式的實作方式 提升Java程式設(shè)計技能:掌握適配器模式與觀察者模式的實作方式 Dec 23, 2023 am 11:52 AM

提升Java程式設(shè)計技能:掌握適配器模式與觀察者模式的實作方式,需要具體程式碼範(fàn)例引言:在日常的軟體開發(fā)中,我們常常需要處理不同類別之間的相容性問題,同時也需要實作各種使用者介面的事件監(jiān)聽和處理。適配器模式和觀察者模式是兩種常用的設(shè)計模式,它們能夠有效地解決這些問題。本文將詳細(xì)介紹適配器模式和觀察者模式的實作方式,並提供具體的Java程式碼範(fàn)例,幫助讀者更好地理解。一、

java框架中觀察者模式的實作方式有哪些? java框架中觀察者模式的實作方式有哪些? Jun 03, 2024 pm 05:05 PM

Java框架中的觀察者模式透過介面和抽象類別定義行為(1);Subject和Observer類別實現(xiàn)管理和回應(yīng)行為(2);Subject提供訂閱和註銷方法,維護觀察者集合,並通知觀察者(3) 。範(fàn)例中,Subject管理觀察者並觸發(fā)事件(4),ConcreteObserver回應(yīng)事件(5)。

PHP入門指南:觀察者模式 PHP入門指南:觀察者模式 May 20, 2023 am 08:21 AM

在現(xiàn)代軟體開發(fā)中,設(shè)計模式是一種被廣泛使用的概念。設(shè)計模式是存在於軟體系統(tǒng)中的通用解決方案,它們經(jīng)過測試和證明,可以幫助開發(fā)人員更有效率地建立複雜的軟體應(yīng)用程式。觀察者模式是其中一個很常見的設(shè)計模式,也是PHP開發(fā)者需要掌握的重要的概念。在本文中,我們將介紹觀察者模式的概念和實作方式,並示範(fàn)如何在PHP應(yīng)用程式中使用它。什麼是觀察者模式?觀察者模式是一種

PHP中的觀察者模式及其使用舉例解釋 PHP中的觀察者模式及其使用舉例解釋 Jun 09, 2023 am 08:53 AM

PHP中的觀察者模式及其使用舉例解釋觀察者模式是一種軟體設(shè)計模式,用於在物件之間建立一對多的依賴關(guān)係。在該模式下,當(dāng)一個物件的狀態(tài)改變時,所有依賴它的物件都會收到通知並自動更新。在PHP程式設(shè)計中,觀察者模式是一種常用的設(shè)計模式,可以幫助我們優(yōu)化和簡化程式碼並提高程式碼的可讀性和可維護性。以下將介紹PHP中觀察者模式的基本方法和舉例解釋其使用。觀察者模式的基本方

深入分析PHP物件導(dǎo)向程式設(shè)計中的觀察者模式 深入分析PHP物件導(dǎo)向程式設(shè)計中的觀察者模式 Aug 13, 2023 pm 06:34 PM

深入分析PHP物件導(dǎo)向程式設(shè)計中的觀察者模式觀察者模式是一種常用的設(shè)計模式,用於在軟體系統(tǒng)中實現(xiàn)物件之間的鬆散耦合。它的核心思想是:一個物件(稱為被觀察者或主題)維護一個依賴它的物件清單(稱為觀察者),當(dāng)被觀察者的狀態(tài)改變時,它會自動通知所有的觀察者。透過這種方式,觀察者模式可以實現(xiàn)物件間的一對多關(guān)係,當(dāng)一個物件改變時,所有相關(guān)的物件都會被通知,並且能

See all articles