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设计模式 Interpreter(解释器模式)
Jun 26 PHP
php继承的一个应用
Sep 06 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
php生成百度sitemap站点地图类函数实例
Oct 17 PHP
php 二维数组时间排序实现代码
Nov 19 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
PHP使用PDO访问oracle数据库的步骤详解
Sep 29 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
PHP getNamespaces()函数讲解
Feb 03 PHP
laravel 实现划分admin和home 模块分组
Oct 15 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过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
jquery 批量上传图片实现代码
2010/01/28 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
初识Node.js
2014/09/03 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Python中DJANGO简单测试实例
2015/05/11 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
python中下标和切片的使用方法解析
2019/08/27 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
Python实现汇率转换操作
2020/05/03 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
文明礼仪事迹材料
2014/01/09 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
考试作弊检讨
2015/01/27 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
分享Python异步爬取知乎热榜
2022/04/12 Python