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

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

PHP實現事件機制實例分析

2024-04-25 20:37:49
字體:
來源:轉載
供稿:網友

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

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

<?php

/**

* 事件

*

* @author xiezhenye <xiezhenye@gmail.com>

*/

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);

}

}

}

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖江市| 江孜县| 柞水县| 连山| 涞水县| 鄢陵县| 武安市| 陆河县| 富川| 红河县| 青州市| 淮阳县| 水富县| 静乐县| 德清县| 新巴尔虎右旗| 沛县| 蓝山县| 慈利县| 镇巴县| 内黄县| 厦门市| 逊克县| 玛纳斯县| 永川市| 涟水县| 绥阳县| 汉中市| 抚顺县| 寿阳县| 大田县| 双鸭山市| 福建省| 阜南县| 龙泉市| 奉贤区| 姚安县| 香港 | 余庆县| 乌恰县| 闵行区|