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

首頁 > 網站 > 建站經驗 > 正文

PHP實!現事件機制實例分析

2019-11-02 15:13:03
字體:
來源:轉載
供稿:網友

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

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

  ?

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

  希望本

qq超拽網名[www.la240.com/html2017/1/4/]
文所述對大家的php程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 秦安县| 平山县| 肃宁县| 和田市| 五华县| 尤溪县| 清水县| 凤山县| 纳雍县| 成安县| 曲松县| 宜宾县| 德化县| 台中市| 大埔县| 武川县| 龙胜| 江安县| 呼和浩特市| 赤水市| 通州市| 和平区| 乐平市| 丰顺县| 白玉县| 乐昌市| 惠东县| 余姚市| 天长市| 武鸣县| 天柱县| 石河子市| 浪卡子县| 莱西市| 浮山县| 郧西县| 眉山市| 汉阴县| 顺义区| 兴义市| 郑州市|