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 相关文章推荐
在数据量大(超过10万)的情况下
Jan 15 PHP
关于BIG5-HKSCS的解决方法
Mar 20 PHP
php IP及IP段进行访问限制的代码
Dec 17 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 PHP
PHP 根据IP地址控制访问的代码
Apr 22 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
一个经典实用的PHP图像处理类分享
Nov 18 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 PHP
PHP中SESSION过期设置
Mar 09 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
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
详解使用python crontab设置linux定时任务
2016/12/08 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
详解python算法之冒泡排序
2019/03/05 Python
Python页面加载的等待方式总结
2021/02/28 Python
AmazeUI在模态框中嵌入表单形成模态输入框
2020/08/20 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
创建市级文明单位实施方案
2014/03/01 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
MySQL索引是啥?不懂就问
2021/07/21 MySQL