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的5个入手程序
Nov 23 PHP
PHP ajax 分页类代码
Nov 13 PHP
php 清除网页病毒的方法
Dec 05 PHP
PHP类中Static方法效率测试代码
Oct 17 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
Jun 28 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
php获取目录所有文件并将结果保存到数组(实例)
Oct 25 PHP
php类中的各种拦截器用法分析
Nov 03 PHP
php单一接口的实现方法
Jun 20 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
Jan 08 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
php异常处理捕获错误整理
Sep 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中将数组存到文件里的实现代码
2012/01/19 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
jQuery.extend 函数详解
2012/02/03 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
js判断游览器类型及版本号的代码
2014/05/11 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
Vue+webpack+Element 兼容问题总结(小结)
2018/08/16 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
Python可以用来做什么
2020/11/23 Python
生育关怀行动实施方案
2014/03/26 职场文书
借款协议书
2014/04/12 职场文书
运动会口号大全
2014/06/07 职场文书
学校安全防火方案
2014/06/07 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
2014年内勤工作总结
2014/11/24 职场文书
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python