麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

PHP實現事件機制實例分析

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

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

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

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

}

}

}

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费毛片随便看 | 婷婷久久综合九色综合色多多蜜臀 | av免播放| 大学生a级毛片免费视频 | 18欧美性xxxx极品hd | 国产乱xxxx | 秋霞a级毛片在线看 | 久久久久久免费 | 成人wxx视频免费 | 黄色片免费看看 | 在线中文字幕观看 | 免费高潮在线国 | 久久网站热最新地址 | 国产精品免费观看视频 | 欧美激情999| 福利四区 | 91超在线 | 国内精品久久久久久久星辰影视 | av在线浏览 | 久久久久久久久浪潮精品 | 国产精品久久久久久久久粉嫩 | 精品成人久久久 | 国产91中文字幕 | 天天干导航 | 嗯~啊~弄嗯~啊h高潮视频 | 日韩精品中文字幕一区二区 | 久久久久久久久久美女 | 男女一边摸一边做羞羞视频免费 | 国产亚洲精品成人a | 中日韩乱码一二新区 | 欧美精品电影一区 | 美女毛片在线观看 | 一级电影免费 | 久草热久草视频 | china对白普通话xxxx | 在线看一区二区三区 | 人禽l交免费视频观看 视频 | a视频在线免费观看 | 久久久久久久免费精品 | 久草在线手机视频 | 播色网 |