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 相关文章推荐
mysql 性能的检查和优化方法
Jun 21 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 PHP
怎样去阅读一份php源代码
Aug 21 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
Dec 29 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
使用phpQuery采集网页的方法
Nov 13 PHP
浅析php工厂模式
Nov 25 PHP
php快速查找数据库中恶意代码的方法
Apr 01 PHP
PHP整合七牛实现上传文件
Jul 03 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
一个非常实用的php文件上传类
Jul 04 PHP
PHP mysqli事务操作常用方法分析
Jul 22 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静态类的原罪详解
2013/05/06 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
2016/05/18 PHP
总结对比php中的多种序列化
2016/08/28 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
Python字符串和文件操作常用函数分析
2015/04/08 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
Python列表list操作相关知识小结
2020/01/29 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
文职个人求职信范文
2013/09/23 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
统计岗位职责
2014/02/21 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python