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 相关文章推荐
针对初学PHP者的疑难问答(2)
Oct 09 PHP
PHP 和 MySQL 开发的 8 个技巧
Jan 02 PHP
使用apache模块rewrite_module (转)
Feb 14 PHP
PHP Memcached应用实现代码
Feb 08 PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
php中使用session防止用户非法登录后台的方法
Jan 27 PHP
php保存任意网络图片到服务器的方法
Apr 14 PHP
PHP闭包函数详解
Feb 13 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 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类的扩展和继承用法实例
2015/06/20 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
jupyter实现重新加载模块
2020/04/16 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
应届生保险求职信
2013/11/11 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
小学生期末评语大全
2014/04/21 职场文书
爱护草坪标语
2014/06/24 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
工人先锋号申报材料
2014/12/29 职场文书
胡桃夹子观后感
2015/06/11 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
2019入党申请书格式
2019/06/25 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis