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 相关文章推荐
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 PHP
php 静态页面中显示动态内容
Aug 14 PHP
ajax 的post方法实例(带循环)
Jul 04 PHP
php读取EXCEL文件 php excelreader读取excel文件
Dec 06 PHP
PHP基于imap获取邮件实例
Nov 11 PHP
php文件上传简单实现方法
Jan 24 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
Jun 22 PHP
tp5实现微信小程序多图片上传到服务器功能
Jul 16 PHP
PHP数组常用函数实例小结
Aug 20 PHP
php中访问修饰符的知识点总结
Jan 27 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
php array_filter除去数组中的空字符元素
2020/06/21 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
php文件上传的两种实现方法
2016/04/04 PHP
jquery随意添加移除html的实现代码
2011/06/21 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
谈谈node.js中的模块系统
2020/09/01 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
Python实现ping指定IP的示例
2018/06/04 Python
python 两个数据库postgresql对比
2019/10/21 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
研究生自我鉴定范文
2013/10/30 职场文书
中专三年学习的个人自我评价
2013/12/12 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
春节联欢会主持词
2014/03/24 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
导游词之南京栖霞山
2019/10/18 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS