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 11 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
基于PHP+Ajax实现表单验证的详解
Jun 25 PHP
PHP获取php,mysql,apche的版本信息示例代码
Jan 16 PHP
php判断两个浮点数是否相等的方法
Mar 14 PHP
php身份证号码检查类实例
Jun 18 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 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
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
再探JavaScript作用域
2014/09/24 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
浅析Python基础-流程控制
2016/03/18 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
Python 统计字数的思路详解
2018/05/08 Python
python pygame模块编写飞机大战
2018/11/20 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
三维科技面试题
2013/07/27 面试题
北京振戎融通Java面试题
2015/09/03 面试题
物业管理大学生个人的自我评价
2013/10/10 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
业务员自荐信范文
2014/04/20 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
中学政教处工作总结
2015/08/13 职场文书
Mysql基础之常见函数
2021/04/22 MySQL