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 08 PHP
mysql数据库差异比较的PHP代码
Feb 05 PHP
php设计模式小结
Feb 15 PHP
PHP多线程类及用法实例
Dec 03 PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 PHP
php页面缓存方法小结
Jan 10 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 PHP
PHP+ajax实现获取新闻数据简单示例
May 08 PHP
YII框架模块化处理操作示例
Apr 26 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 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中实现记住密码自动登录的代码
2011/03/02 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
php 强制下载文件实现代码
2013/10/28 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
php实现微信支付之现金红包
2018/05/30 PHP
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
angularJS开发注意事项
2018/05/26 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
Python笔记(叁)继续学习
2012/10/24 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
python将数组n等分的实例
2019/12/02 Python
Python如何转换字符串大小写
2020/06/04 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
单位工程竣工验收方案
2014/03/16 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
户外活动总结
2015/02/04 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
Python实现信息管理系统
2022/06/05 Python