Home >Backend Development >PHP Tutorial >How to implement event mechanism in PHP, php event mechanism_PHP tutorial

How to implement event mechanism in PHP, php event mechanism_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 09:46:53897browse

How PHP implements event mechanism, php event mechanism

The example in this article describes how PHP implements event mechanism. Share it with everyone for your reference. The details are as follows:

<&#63;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);
  }
 }
}

I hope this article will be helpful to everyone’s PHP programming design.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1030138.htmlTechArticleHow PHP implements the event mechanism, php event mechanism This article describes the method of PHP implementing the event mechanism. Share it with everyone for your reference. The details are as follows: php/*** event*/class Event...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn