PHPAOP面向切面
- 如果一個程式是一個管道系統,AOP 就是在管道上鑽一些孔,在每個孔中注入新的程式碼流。
- AOP 的實施分 3 步:切面分解、切面實現和切面合成。
- OOP 只能沿繼承樹的縱向方向重用,AOP 可以沿橫向方向重用。
- 物件導向關注於每個物件定義的完整性
- 切面是關注於整個物件系統的某個/某些
特定功能面
,比如日誌、過濾等,把這些特定功能面剝離出來達到共用的目的
User.php
<?php
class User {
private $name;
function set_name($value) {
$this->name = $value;
}
function get_name() {
return $this->name;
}
}
#$c1 = new User();
#$c1->set_name("Colin");
#$name = $c1->get_name();
#echo "name = ", $name, "
";
?>
現在如果想在使用者名稱字設定或讀取的時候記錄日誌,該怎麼做?
你可以建立一個動態的日誌處理物件
,把這個使用者物件包裝在其中,這樣看起來使用者物件的動作都會通知到其包裝日誌類一樣
Logged.php
<?php
require_once(__dir__ . "/User.php");
class Logged {
private $obj;
function __call($method, $args) {
echo $method, "(", join(",", $args), ")
";
return call_user_func_array(array(&$this->obj, $method), $args);
}
function __construct($obj) {
$this->obj = $obj;
}
}
$c1 = new Logged(new User());
$c1->set_name("Colin");
$name = $c1->get_name();
echo "name = ", $name, "
";
?>
Output
set_name(Colin)
get_name()
name = Colin
呼叫程式碼還是一樣,但這一次,任何對User方法的訪問,都會被echo出來(你可以把echo替換其他的邏輯,如安全控制、日誌記錄、資料過濾等)
就好比在User物件的方法被呼叫時被某個鉤子函式
給掛載了,進行了預處理
或後置處理
相關文章
- Spring 面向切面AOPSpring
- Spring之面向切面Spring
- AOP 面向切面程式設計程式設計
- Spring-AOP(面向切面)Spring
- AOP(面向切面程式設計)程式設計
- 面向切面程式設計AOP程式設計
- iOS面向切面的TableView-AOPTableViewiOSView
- Java 面向切面程式設計AOPJava程式設計
- AOP--面向切面程式設計程式設計
- 前端js面向切面程式設計(AOP)前端JS程式設計
- React Native面向切面程式設計React Native程式設計
- Android面向切面程式設計(AOP)Android程式設計
- aop面向切面程式設計的實現程式設計
- 四、Spring-面向切面程式設計Spring程式設計
- Java中的面向切面程式設計(AOP)Java程式設計
- 前端解讀面向切面程式設計(AOP)前端程式設計
- 程式設計思想 面向切面程式設計程式設計
- Spring之AOP面向切面程式設計Spring程式設計
- 面向切面程式設計和依賴注入程式設計依賴注入
- 設計模式之面向切面程式設計AOP設計模式程式設計
- 深入學習Spring框架(三)- AOP面向切面Spring框架
- 在Javascript中進行面向切面程式設計JavaScript程式設計
- (長文預警)面向切面 Aspects 原始碼閱讀原始碼
- 01.AOP(AspectOrientatedProgramming面向切面程式設計)程式設計
- 面向切面程式設計之瘋狂的 Aspects程式設計
- Android AOP面向切面設計程式設計Android程式設計
- 面向橫切面程式設計(Aspect Oriented Programming)。程式設計
- Spring AOP——Spring 中面向切面程式設計Spring程式設計
- Spring AOP(面向切面程式設計)是什麼?Spring程式設計
- 面向切面的Spring(二) xml中定義aopSpringXML
- 面向切面程式設計 ( Aspect Oriented Programming with Spring )程式設計Spring
- Spring理論基礎-面向切面程式設計Spring程式設計
- Python裝飾器與面向切面程式設計Python程式設計
- 手寫Spring---AOP面向切面程式設計(4)Spring程式設計
- 手寫Spring---AOP面向切面程式設計(3)Spring程式設計
- Spring 面向切面程式設計AOP 詳細講解Spring程式設計
- iOS開發 面向切面程式設計之 Aspects 原始碼解析iOS程式設計原始碼
- JS實現AOP 面向切面程式設計 (裝飾者模式)JS程式設計模式