国产探花免费观看_亚洲丰满少妇自慰呻吟_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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 英超| 嵊泗县| 梁河县| 共和县| 扎赉特旗| 聂荣县| 旺苍县| 富裕县| 独山县| 黎城县| 通化市| 辉县市| 山丹县| 来安县| 铜山县| 报价| 灵宝市| 沈阳市| 岚皋县| 长垣县| 若尔盖县| 莆田市| 五原县| 诏安县| 上林县| 娄烦县| 清流县| 绥芬河市| 额尔古纳市| 镇沅| 长丰县| 柏乡县| 嵩明县| 抚顺县| 桑植县| 崇文区| 宜良县| 南澳县| 茂名市| 民勤县| 堆龙德庆县|