首先介紹下aop程式設計,也叫做面向切面程式設計,是一種非侵入式程式設計的方法,採用外部注入的方式來取代嵌入**。可以實現非常好的模組低耦合。
假設你的框架有乙個 frameworkd::init方法,功能是初始化框架資源。現在有db,template的初始化也需要在這個階段執行,傳統的做法就是只能修改 framework::init在裡面加入 db,template的方法呼叫。未來如果增加了新的模組,比如cache。那就需要修改frameworkd::init的**。這種做法顯然是侵入性的。
當然也可以用hook list的方式來實現。在需要外部注入的地方加入乙個hook list,遍歷執行外部注入的介面。但遠沒有aop強大,而且還需要不斷加入hook list的遍歷點。
如果aop程式設計的話,只需要外部注入乙個函式,執行 framework::init時,就會執行指定的**。
<?php
class myservices
public function doadminstuff2 ()
}function advicefordoadmin ()
function advicefordoadmin2 ()
aop_add_after('myservices->doadmin*()', 'advicefordoadmin');
aop_add_after('myservices->doadmin*()', 'advicefordoadmin2');
$o = new myservices;
$o->doadminstuff1();
$o->doadminstuff2();
執行結果:
calling doadminstuff1
aop[2] run
aop[1] run
calling doadminstuff2
aop[2] run
aop[1] run
** php AOP 面向切面
感謝這兩篇文章 aop為aspect oriented programming的縮寫,意為 面向切面程式設計 也叫面向方面 可以通過預編譯方式和執行期動態 實現在不修改源 的情況下給程式動態統一新增功能的一種技術。aop實際是gof設計模式的延續,設計模式孜孜不倦追求的是呼叫者和被呼叫者之間的解耦,...
php uuid 擴充套件,PHP 擴充套件
編譯安裝時候沒有啟用下面擴充套件的,可以單獨安裝 php關鍵性擴充套件安裝 www lanmps 假設 套件 安裝目錄 www lanmps php 7.0.11 假設 php 安裝目錄 1.fileinfo 擴充套件 它應用於檔案處理的改進 進入套件解壓縮後目錄 假設套件目錄為 root lanm...
位擴充套件和字擴充套件
字位擴充套件 儲存資訊一般是儲存在儲存器 rom ram 上的 在實際應用中,經常出現一片rom或ram晶元不能滿足對儲存器容量需求的情況,這就需要用若干片rom或ram組合起來 形成乙個儲存容量更大的儲存器。而組合方式有子擴充套件和位擴充套件兩種。字擴充套件用多片位寬相同的儲存器 rom或ram ...