首頁 後端開發 php教程 PHP實作AOP的基礎

PHP實作AOP的基礎

Jul 04, 2018 pm 05:04 PM

這篇文章主要介紹了關於PHP實現AOP的基礎,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

AOP是OOP的延續,是Aspect Oriented Programming的縮寫,意思是面向方面編程,有的又稱之為面向切面編程。在企業級開發中面向方面編程很有用。例如,我們在呼叫某些特定的方法之前,我們需要先作一個日誌記錄,在呼叫方法之後,我們還需要一個日誌記錄。我們先來看看不使用AOP,我們在PHP裡怎麼實現。

<?php
/**
 * 日志类 
 */
 class SystemLog {    
 function beforeLog() {        
 // write before log    
 }    
    function afterLog() {       
     // write after log    
     }
} 
/**
 * 新闻类 
 */
 class News extends SystemLog {    
 function add() {        
 $this->beforeLog();        
 // add news
        $this->afterLog();
    } 
    function delete() {        
    // delete news   
     }
}
登入後複製

我們定義一個日誌類,類別包含兩個方法beforeLog()和afterLog(),用於記錄方法呼叫前和呼叫後的日誌,接著我們定義了新聞類,新聞類繼承日誌類,要在呼叫add()方法前後完成日誌記錄,我們只有在add()方法內部呼叫beforeLog()和afterLog()兩個方法。雖然我們實作在呼叫add()方法前/後記錄日誌,但這樣的程式碼在OOP程式設計中一點也不優雅,也違背了「弱耦合,強內聚」的思想,因為News類別下的add( )方法只是應該做新增新聞這件事情,然後我們在add()方法中又記了日誌,另外如果我們需要為很多方法增加日誌記錄功能,那麼將會呼叫很多次beforeLog()和afterLog( )方法,帶來很多重複程式碼。

在PHP5中,如果呼叫未定義的方法,將自動呼叫_call()方法。利用PHP5的這個特點,我們可以在_call()方法中實現AOP編程,這種AOP編程只是一個AOP雛形,沒有Java那麼強大。

<?php
/**
 * 日志类 
 */
 class SystemLog {    
 function _call($method,$args) {        
 $method = "_$method"; // 在要调用的方法名前加‘_’,$method为要调用的方法名
        // write before log
        $return = call_user_func_array(array($this, $method), $args);        
        // write after log 
        return $return;
    } 
} 
/**
 * 新闻类 
 */
 class News extends SystemLog {    
 function _add() {        
 // add news    
 } 
    function delete() {        
    // delete news    
    }
}
登入後複製

新聞類還是繼承日誌類,需要注意的是我們在add()方法前加了'_',add()方法中並沒有任何日誌記錄相關的程式碼。

$news = new News();
$news->add();
登入後複製

呼叫News類別中的add()方法,注意重寫後的News類別中並沒有add()方法,只有_add()方法,這時PHP找不到add()方法則會自動呼叫_call()方法,_call()方法有兩個參數,第一個參數為被呼叫方法的名稱,第二個參數為被呼叫方法的參數,在_call()方法中先為被呼叫的方法名稱前加上'_',這裡,加入'_'後的方法後就變成了_add,_add()方法在News類別中是存在的,然後寫方法調用前日誌,接著使用call_user_func_array()函數執行前物件方法調用,方法調用完成再寫方法調用後日誌。

回顧一下,我們利用編程慣例和PHP5中調用未定義的方法將自動調用_call()方法的特性,實現了AOP,但這裡的AOP還只是雛形,功能還不夠強大,隨著PHP的發展,我相信未來的PHP在AOP方面也會更強大。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

 關於PHP的AOP思想的解析

#

以上是PHP實作AOP的基礎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1276
29
C# 教程
1256
24
說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? 說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

您如何防止PHP中的SQL注入? (準備的陳述,PDO) 您如何防止PHP中的SQL注入? (準備的陳述,PDO) Apr 15, 2025 am 12:15 AM

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

See all articles