国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

PHP實(shí)現(xiàn)事件機(jī)制實(shí)例分析

2024-05-04 23:36:55
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了PHP實(shí)現(xiàn)事件機(jī)制的方法,實(shí)例分析了事件機(jī)制的原理與php的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了PHP實(shí)現(xiàn)事件機(jī)制的方法。分享給大家供大家參考。具體分析如下:

內(nèi)置了事件機(jī)制的語(yǔ)言不多,php也沒(méi)有提供這樣的功能。事件(Event)說(shuō)簡(jiǎn)單了就是一個(gè)Observer模式,實(shí)現(xiàn)起來(lái)很容易。但是有所不同的是,事件的監(jiān)聽(tīng)者誰(shuí)都可以加,但是只能由直接包含它的對(duì)象觸發(fā)。這就有一點(diǎn)點(diǎn)難度了。php有一個(gè)debug_backtrace函數(shù),可以得到當(dāng)前的調(diào)用棧,由此可以找到判斷調(diào)用事件觸發(fā)函數(shù)的對(duì)象是不是直接包含它的對(duì)象的辦法。

 

 
  1. <?php 
  2. /** 
  3. * 事件 
  4. * 
  5. * @author xiezhenye <xiezhenye@gmail.com> 
  6. */ 
  7. class Event { 
  8. private $callbacks = array(); 
  9. private $holder
  10. function __construct() { 
  11. $bt = debug_backtrace(); 
  12. if (count($bt) < 2) { 
  13. $this->holder = null; 
  14. return
  15. $this->holder = &$bt[1]['object']; 
  16. function attach() { 
  17. $args = func_get_args(); 
  18. switch (count($args)) { 
  19. case 1: 
  20. if (is_callable($args[0])) { 
  21. $this->callbacks[]= $args[0]; 
  22. return
  23. break
  24. case 2: 
  25. if (is_object($args[0]) && is_string($args[1])) { 
  26. $this->callbacks[]= array(&$args[0], $args[1]); 
  27. return
  28. default
  29. return
  30. function notify() { 
  31. $bt = debug_backtrace(); 
  32. if ($this->holder &&  
  33. ((count($bt) >= 2 && $bt[count($bt) - 1]['object'] !== $this->holder) 
  34. || (count($bt) < 2))) { 
  35. throw(new Exception('Notify can only be called in holder')); 
  36. foreach ($this->callbacks as $callback) { 
  37. $args = func_get_args(); 
  38. call_user_func_array($callback$args); 

希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 峡江县| 蓬莱市| 阿荣旗| 绵竹市| 贺州市| 即墨市| 西和县| 阿荣旗| 乌苏市| 丰原市| 蓬安县| 凌源市| 内江市| 油尖旺区| 兴文县| 乐山市| 夏津县| 攀枝花市| 夏河县| 隆尧县| 商河县| 宁蒗| 广汉市| 建湖县| 岢岚县| 安西县| 白朗县| 宜黄县| 辛集市| 石棉县| 肥东县| 嘉义市| 永济市| 华容县| 鄂温| 札达县| 宁都县| 龙井市| 长宁区| 项城市| 涟源市|