面向方面編程(AOP)對于PHP來說是一個新的概念。現(xiàn)在PHP對于 AOP 并沒有官方支持,但有很多擴展和庫實現(xiàn)了這個特性。本課中,我們將使用 Go! PHP library 來學(xué)習(xí) PHP 如何進行 AOP 開發(fā),或者在需要的時候,可以回來看一眼。

Aspect-Oriented programming is like a new gadget for geeks.
面向方面編程的思想在二十世紀90年代中期,于施樂帕洛阿爾托研究中心(PARC)成型。同很多有趣的新技術(shù)一樣,由于缺少明確的定義,起初 AOP 備受爭議。因此相關(guān)小組決定將未完成的想法公之于眾,以便接受廣大社區(qū)的反饋。關(guān)鍵問題在于“關(guān)注點分離(Separation of Concerns)”的概念。AOP 是一種可以分離關(guān)注的可行系方案。
AOP 于90年代末趨于成熟,標(biāo)識為施樂 AspectJ 的發(fā)布,IBM 緊隨其后,于2001年發(fā)布了 Hyper/J。現(xiàn)在,AOP是一種對于常用編程語言來說都是一種成熟的技術(shù)。
AOP 的核心就是“方面”,但在我們定義「方面『aspect』」之前,我們需要先討論兩個術(shù)語;「切點『 point-cut』 」和「通知『advise』」。切點代表我們代碼中的一個時間點,特指運行我們代碼的某個時間。在切點運行代碼被稱為通知,結(jié)合一個活多個切點及通知的即為方面。
通常,每個類都會有一個核心的行為或關(guān)注點,但有時,類可能存在次要的行為。例如,類可能會調(diào)用一個日志記錄器或是通知一個觀察員。因為類中的這些功能是次要的,其行為通常都是相同的。這種行為被稱為“交叉關(guān)注點”;使用 AOP 可以避免。
Chris Peters 已經(jīng)討論過在PHP中實現(xiàn) AOP 的Flow 框架。 Lithium 框架也提供了對AOP的實現(xiàn)。
另一個框架采用了不同的方法,創(chuàng)建了一個 C/C++ 編寫的PHP擴展,在PHP解釋器的層級上宣示著它的魔力。名為AOP PHP Extension,我會在后續(xù)文章中討論它。
但正如我之前所言,本文將檢閱Go! AOP-PHP 庫。
Go! 庫并未擴展;它完全由PHP編寫,并為PHP5.4或更高版本使用。作為一個純PHP庫,它部署簡易,即使是在不允許編譯安裝你自己的PHP擴展的受限及共享主機環(huán)境,也可以輕易安裝。
Composer 是安裝 PHP 包的選方法。如果你沒有使用過 Composer,你可以在Go! GitHub repository下載。
首先,將下面幾行加入你的 composer.json 文件。