PHP实现事件机制的方法


Posted in PHP onJuly 10, 2015

本文实例讲述了PHP实现事件机制的方法。分享给大家供大家参考。具体如下:

<?php
/**
* 事件
*/
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程序设计有所帮助。

PHP 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
sqlyog 中文乱码问题的设置方法
Oct 19 PHP
基于MySQL体系结构的分析
May 02 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
网站防止被刷票的一些思路与方法
Jan 08 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
十大使用PHP框架的理由
Sep 26 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
php目录拷贝实现方法
Jul 10 #PHP
php通过前序遍历树实现无需递归的无限极分类
Jul 10 #PHP
php中array_multisort对多维数组排序的方法
Jun 21 #PHP
php获取文件类型和文件信息的方法
Jul 10 #PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 #PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 #PHP
codeigniter实现get分页的方法
Jul 10 #PHP
You might like
PHP脚本数据库功能详解(上)
2006/10/09 PHP
PHP运行时强制显示出错信息的代码
2011/04/20 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
PHP中串行化用法示例
2016/11/16 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
Element Input组件分析小结
2018/10/11 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
Python实现高效求解素数代码实例
2015/06/30 Python
Python写入CSV文件的方法
2015/07/08 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
导游的职业规划书范文
2013/12/27 职场文书
员工保密协议书
2014/09/27 职场文书
商业用房租赁协议书
2014/10/13 职场文书
Python几种酷炫的进度条的方式
2022/04/11 Python