欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP實(shí)現(xiàn)事件機(jī)制實(shí)例分析

 更新時(shí)間:2015年06月26日 16:43:16   作者:瘋狂的流浪  
這篇文章主要介紹了PHP實(shí)現(xiàn)事件機(jī)制的方法,實(shí)例分析了事件機(jī)制的原理與php的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了PHP實(shí)現(xiàn)事件機(jī)制的方法。分享給大家供大家參考。具體分析如下:

內(nèi)置了事件機(jī)制的語言不多,php也沒有提供這樣的功能。事件(Event)說簡(jiǎn)單了就是一個(gè)Observer模式,實(shí)現(xiàn)起來很容易。但是有所不同的是,事件的監(jiān)聽者誰都可以加,但是只能由直接包含它的對(duì)象觸發(fā)。這就有一點(diǎn)點(diǎn)難度了。php有一個(gè)debug_backtrace函數(shù),可以得到當(dāng)前的調(diào)用棧,由此可以找到判斷調(diào)用事件觸發(fā)函數(shù)的對(duì)象是不是直接包含它的對(duì)象的辦法。

<?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]['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);
    }
  }
}

希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • PHP中return 和 exit 、break和contiue 區(qū)別與用法

    PHP中return 和 exit 、break和contiue 區(qū)別與用法

    return、break和contiue是語言結(jié)構(gòu),就如同if語句之類的,但是exit卻是個(gè)函數(shù)
    2012-04-04
  • php setcookie(name, value, expires, path, domain, secure) 參數(shù)詳解

    php setcookie(name, value, expires, path, domain, secure) 參數(shù)

    本篇文章是對(duì)php setcookie(name, value, expires, path, domain, secure) 參數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php使用curl獲取https請(qǐng)求的方法

    php使用curl獲取https請(qǐng)求的方法

    這篇文章主要介紹了php使用curl獲取https請(qǐng)求的方法,涉及curl針對(duì)https請(qǐng)求的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-02-02
  • PHP+Mysql日期時(shí)間如何轉(zhuǎn)換(UNIX時(shí)間戳和格式化日期)

    PHP+Mysql日期時(shí)間如何轉(zhuǎn)換(UNIX時(shí)間戳和格式化日期)

    UNIX時(shí)間戳和格式化日期是我們常打交道的兩個(gè)時(shí)間表示形式,Unix時(shí)間戳存儲(chǔ)、處理方便,但是不直觀,格式化日期直觀,但是處理起來不如Unix時(shí)間戳那么自如,所以有的時(shí)候需要互相轉(zhuǎn)換,下面給出互相轉(zhuǎn)換的幾種轉(zhuǎn)換方式
    2012-07-07
  • php 中英文語言轉(zhuǎn)換類代碼

    php 中英文語言轉(zhuǎn)換類代碼

    突然想做個(gè)中英文的功能試一下,只是把一些常用且有規(guī)律的詞匯比如 ‘評(píng)論’ ,時(shí)間單位(幾秒幾小時(shí)前這些)可以自由的轉(zhuǎn)化。
    2011-08-08
  • php接口隔離原則實(shí)例分析

    php接口隔離原則實(shí)例分析

    這篇文章主要介紹了php接口隔離原則,結(jié)合實(shí)例形式分析了PHP接口隔離原則的相關(guān)原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • 攻克CakePHP(PHP中的Ruby On Rails框架)圖文介紹

    攻克CakePHP(PHP中的Ruby On Rails框架)圖文介紹

    CakePHP框架實(shí)例介紹分析。圖文并茂
    2008-10-10
  • PHP5.3新特性小結(jié)

    PHP5.3新特性小結(jié)

    這篇文章主要介紹了PHP5.3新特性,結(jié)合實(shí)例總結(jié)分析了PHP5.3新增的命名空間、靜態(tài)綁定、匿名函數(shù)、操作符及垃圾回收機(jī)制的相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • PHP Reflection API詳解

    PHP Reflection API詳解

    這篇文章主要介紹了PHP Reflection API詳解,本文講解了Reflection類、ReflectionException類、ReflectionFunction類、ReflectionParameter類、ReflectionClass類、ReflectionMethod類等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • PHP header函數(shù)分析詳解

    PHP header函數(shù)分析詳解

    PHP只是以HTTP協(xié)議將HTML文檔的標(biāo)頭送到瀏覽器,告訴瀏覽器具體怎么處理這個(gè)頁面,至于傳送的內(nèi)容則需要熟悉一下HTTP協(xié)議了,與PHP無關(guān)
    2011-08-08

最新評(píng)論