PHP事件機制的原理

墨辰丷
發布: 2023-03-31 08:34:02
原創
3209 人瀏覽過

本篇主要介紹PHP事件機制的原理,有興趣的朋友參考下,希望對大家有幫助。

本文實例講述了PHP實作事件機制的方法,具體分析如下:

內建了事件機制的語言不多,php也沒有提供這樣的功能。事件(Event)說簡單了就是一個Observer模式,實作起來很容易。但有所不同的是,事件的監聽者誰都可以加,但是只能由直接包含它的物件觸發。這就有一點點難度了。 php有一個debug_backtrace函數,可以得到目前的呼叫棧,因此可以找到判斷呼叫事件觸發函數的物件是不是直接包含它的物件的辦法。

<?php
/**
* 事件
*
* @author xiezhenye <xiezhenye@gmail.com>
*/
class Event {
  private $callbacks = array();
  private $holder;
  function __construct() {
    $bt = debug_backtrace();
    if (count($bt) < 2) {
      $this->holder = null;
      return;
    }
    $this->holder = &$bt[1][&#39;object&#39;];
  }
  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][&#39;object&#39;] !== $this->holder)
        || (count($bt) < 2))) {
      throw(new Exception(&#39;Notify can only be called in holder&#39;));
    }
    foreach ($this->callbacks as $callback) {
      $args = func_get_args();
      call_user_func_array($callback, $args);
    }
  }
}
登入後複製

總結:以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。

相關推薦:

php利用正規表示式擷取內容中的連結

PHP實作漢字驗證碼

php實作載入字型並儲存

#

以上是PHP事件機制的原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板