찾다
백엔드 개발PHP 튜토리얼PHP实现事件机制范例分析

PHP实现事件机制实例分析

PHP实现事件机制实例分析


内置了事件机制的语言不多,php也没有提供这样的功能。事件(Event)说简单了就是一个Observer模式,实现起来很容易。但是有所不同的是,事件的监听者谁都可以加,但是只能由直接包含它的对象触发。这就有一点点难度了。php有一个debug_backtrace函数,可以得到当前的调用栈,由此可以找到判断调用事件触发函数的对象是不是直接包含它的对象的办法。

<?php/*** 事件* @edit http://www.lai18.com * @author xiezhenye <[email&#160;protected]>*/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);    }  }}
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
AMP是什么币?AMP是什么币?Feb 24, 2024 pm 09:16 PM

什么是AMP币?AMP代币是由Synereo团队于2015年创立,作为Synereo平台的主要交易货币。AMP代币旨在通过多种功能和用途,为用户提供更好的数字经济体验。AMP代币的用途AMP代币在Synereo平台中拥有多重角色和功能。首先,作为平台的加密货币奖励系统的一部分,用户能够通过分享和推广内容来获得AMP奖励,这一机制鼓励用户更积极地参与平台的活动。AMP代币还可用于在Synereo平台上推广和传播内容。用户可以通过使用AMP代币提升他们的内容在平台上的曝光率,以吸引更多观众来查看和分

java单例模式中Holder指的是什么java单例模式中Holder指的是什么Apr 29, 2023 am 11:13 AM

区别1、在声明类中,成员变量不声明实例变量,而是放置在静态内部类中。这种方法类似于懒汉。他们都采用类装载机制,以确保初始化实例只有一个线程。不同的是,Holder单个模式是将实例的初始化放入静态类别从而实现懒加载。Holder模式的核心还是静态变量,足够方便,线程安全;通过静态Holder类持有真实例子,间接实现懒惰载入。2、特点,既实现懒加载,性能好,线程安全。实例publicclassSingleton{/***类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例*没有绑定关

Java中this方法怎么使用Java中this方法怎么使用Apr 18, 2023 pm 01:58 PM

一、this关键字1.this的类型:哪个对象调用就是哪个对象的引用类型二、用法总结1.this.data;//访问属性2.this.func();//访问方法3.this();//调用本类中其他构造方法三、解释用法1.this.data这种是在成员方法中使用让我们来看看不加this会出现什么样的状况classMyDate{publicintyear;publicintmonth;publicintday;publicvoidsetDate(intyear,intmonth,intday){ye

一篇搞懂this指向,赶超70%的前端人一篇搞懂this指向,赶超70%的前端人Sep 06, 2022 pm 05:03 PM

同事因为this指向的问题卡住的bug,vue2的this指向问题,使用了箭头函数,导致拿不到对应的props。当我给他介绍的时候他竟然不知道,随后也刻意的看了一下前端交流群,至今最起码还有70%以上的前端程序员搞不明白,今天给大家分享一下this指向,如果啥都没学会,请给我一个大嘴巴子。

jQuery中this的使用技巧解析jQuery中this的使用技巧解析Feb 22, 2024 pm 08:54 PM

jQuery是一种流行的JavaScript库,广泛用于网页开发中的DOM操作和事件处理。其中一个重要的概念就是this关键字的使用。在jQuery中,this代表当前操作的DOM元素,但在不同的上下文中,this的指向可能会有所不同。本文将通过具体的代码示例来解析jQuery中this的使用技巧。首先,让我们来看一个简单的示例:

JavaScript箭头函数中的this详解JavaScript箭头函数中的this详解Jan 25, 2024 pm 01:41 PM

JavaScript中箭头函数是一种比较新的语法,没有自己的this关键字,相反箭头函数的this指向包含它的作用域对象,影响方面有:1、箭头函数中的this是静态的;2、箭头函数不能作为构造函数使用;3、箭头函数不能用作方法。

什么是this?深入解析JavaScript中的this什么是this?深入解析JavaScript中的thisAug 04, 2022 pm 05:02 PM

什么是this?下面本篇文章给大家介绍一下JavaScript中的this,并聊聊this在函数不同调用方式下的区别,希望对大家有所帮助!

JavaScript如何改变this指向?三种方法浅析JavaScript如何改变this指向?三种方法浅析Sep 19, 2022 am 09:57 AM

JavaScript如何改变this指向?下面本篇文章给大家介绍一下JS改变this指向的三种方法,希望对大家有所帮助!

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음