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

首頁 > 開發 > PHP > 正文

基于PHP實現的事件機制實例分析

2024-05-04 23:36:24
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了基于PHP實現的事件機制,實例分析了事件機制的原理及php中debug_backtrace函數完成事件機制的實現技巧,需要的朋友可以參考下

本文實例講述了基于PHP實現的事件機制。分享給大家供大家參考。具體分析如下:

內置了事件機制的語言不多,php也沒有提供這樣的功能。事件(Event)說簡單了就是一個Observer模式,實現起來很容易。但是有所不同的是,事件的監聽者誰都可以加,但是只能由直接包含它的對象觸發。這就有一點點難度了。php有一個debug_backtrace函數,可以得到當前的調用棧,由此可以找到判斷調用事件觸發函數的對象是不是直接包含它的對象的辦法。

 

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

希望本文所述對大家的php程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰县| 汤原县| 顺平县| 若羌县| 乌鲁木齐县| 鸡东县| 洪雅县| 准格尔旗| 昌江| 武清区| 丰台区| 罗平县| 衡阳县| 若尔盖县| 时尚| 蒲城县| 浦东新区| 抚松县| 余姚市| 寻甸| 苍山县| 桐乡市| 济宁市| 涞水县| 开化县| 建瓯市| 贺兰县| 农安县| 通河县| 维西| 莱芜市| 阿拉善盟| 长治县| 洛川县| 闻喜县| 贵溪市| 昭平县| 南江县| 嘉峪关市| 左权县| 蒲城县|