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 相关文章推荐
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
PHP Array交叉表实现代码
Aug 05 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
Aug 09 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 PHP
php根据某字段对多维数组进行排序的方法
Mar 07 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
php in_array() 检查数组中是否存在某个值详解
Nov 23 PHP
PHP+Apache环境中如何隐藏Apache版本
Nov 24 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 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
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
浅析Python基础-流程控制
2016/03/18 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
python支付宝支付示例详解
2019/08/22 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
Python生成并下载文件后端代码实例
2020/08/31 Python
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
android面试问题与答案
2016/12/27 面试题
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
动物学专业毕业生求职信
2013/10/11 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
职称评定自我鉴定
2014/03/18 职场文书
民生工程实施方案
2014/03/22 职场文书
辞职信怎么写?
2019/05/21 职场文书
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏
2022漫威和DC电影上映作品
2022/04/05 欧美动漫
win sever 2022如何占用操作主机角色
2022/06/25 Servers