成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Yii框架組件的事件機(jī)制原理與用法分析

Yii框架組件的事件機(jī)制原理與用法分析

熱門標(biāo)簽:嘟嘟云外呼系統(tǒng) 南京3D地圖標(biāo)注 正規(guī)電銷機(jī)器人系統(tǒng) 重慶外呼電銷系統(tǒng)多少錢 辦理400電話哪家好點(diǎn) 咸陽電銷 邢臺400電話辦理 南寧電話外呼系統(tǒng)線路 濟(jì)源百應(yīng)電銷機(jī)器人聯(lián)系方式

本文實例講述了Yii框架組件的事件機(jī)制原理與用法。分享給大家供大家參考,具體如下:

在深入分析 Yii 的運(yùn)行之前,我們先來看一下 Yii 框架中一個很重要的機(jī)制 - 事件。

Yii 官方參考文檔關(guān)于組件事件的解釋:

=======================================================================

組件事件是一些特殊的屬性,它們使用一些稱作 事件句柄 ( event handlers )的方法作為其值。 附加 ( 分配 ) 一個方法到一個事件將會引起方法在事件被喚起處自動被調(diào)用。因此, 一個組件的行為可能會被一種在部件開發(fā)過程中不可預(yù)見的方式修改。

組件事件以 on 開頭的命名方式定義。和屬性通過 getter/setter 方法來定義的命名方式一樣, 事件的名稱是大小寫不敏感的。以下代碼定義了一個 onClicked 事件 :

public function onClicked($event)
{
  $this->raiseEvent('onClicked', $event);
}

這里作為事件參數(shù)的 $event 是 CEvent 或其子類的實例。

我們可以附加一個方法到此 event ,如下所示 :

$component->onClicked=$callback;

這里的 $callback 指向了一個有效的 PHP 回調(diào)。它可以是一個全局函數(shù)也可以是類中的一個方法。 如果是后者,它必須以一個數(shù)組的方式提供 : array($object,'methodName').

事件句柄的結(jié)構(gòu)如下:

function methodName($event)
{
  ......
}

這里的 $event 即描述事件的參數(shù)(它來源于 raiseEvent() 調(diào)用)。 $event 參數(shù)是 CEvent 或其子類的實例。 至少,它包含了關(guān)于誰觸發(fā)了此事件的信息。

從版本 1.0.10 開始,事件句柄也可以是一個 PHP 5.3 以后支持的匿名函數(shù)。例如,

$component->onClicked=function($event) {
  ......
}

如果我們現(xiàn)在調(diào)用 onClicked() , onClicked 事件將被觸發(fā)(在 onClicked() 中), 附屬的事件句柄將被自動調(diào)用。

一個事件可以綁定多個句柄。當(dāng)事件觸發(fā)時, 這些句柄將被按照它們綁定到事件時的順序依次執(zhí)行。如果句柄決定組織后續(xù)句柄被執(zhí)行,它可以設(shè)置 $event->handled 為 true 。

=======================================================================

從這一句開始”我們可以附加一個方法到此 event “,讀者可能 就不知道是什么意思了,于是看一下 CComponent 的源碼:

/**
   * Raises an event.
   * This method represents the happening of an event. It invokes
   * all attached handlers for the event.
   * @param string the event name
   * @param CEvent the event parameter
   * @throws CException if the event is undefined or an event handler is invalid.
   */
  public function raiseEvent($name,$event)
{
  //事件名稱同一小寫化處理
    $name=strtolower($name);
    //先查看成員變量是否有以此命名的事件
    if(isset($this->_e[$name]))
    {
      //如果有,這個成員保存的是每一個事件處理器
      //以數(shù)組的方式保存
      foreach($this->_e[$name] as $handler)
      {
        //如果事件處理器是一個字符串,那么就是一個全局函數(shù)
        if(is_string($handler))
          call_user_func($handler,$event);
        //如果不是,那么有可能是一個數(shù)組,該數(shù)組包含一個對象和方法名
        //參考http://php.net/manual/en/function.is-callable.php
        else if(is_callable($handler,true))
        {
          // an array: 0 - object, 1 - method name
          list($object,$method)=$handler;
          //如果對象是一個對象名
          if(is_string($object)) // static method call
            call_user_func($handler,$event);
          //判斷對象是否有要調(diào)用的方法
          else if(method_exists($object,$method))
            $object->$method($event);
          else
            throw new CException(Yii::t('yii','Event "{class}.{event}" is attached with an invalid handler
"{handler}".',
              array('{class}'=>get_class($this), '{event}'=>$name, '{handler}'=>$handler[1])));
        }
        else
          throw new CException(Yii::t('yii','Event "{class}.{event}" is attached with an invalid handler
"{handler}".',
            array('{class}'=>get_class($this), '{event}'=>$name, '{handler}'=>gettype($handler))));
        // stop further handling if param.handled is set true
        //如果想停止繼續(xù)循環(huán)獲取事件的handler
//那么需要設(shè)置event的handled為true
        if(($event instanceof CEvent)  $event->handled)
          return;
      }
    }
    else if(YII_DEBUG  !$this->hasEvent($name))
      throw new CException(Yii::t('yii','Event "{class}.{event}" is not defined.',
        array('{class}'=>get_class($this), '{event}'=>$name)));
    //如果_e中沒有這個成員也沒關(guān)系
  }

我們再看一下 CEvent 的代碼( CComponent.php ):

class CEvent extends CComponent
{
  /**
   * @var object the sender of this event
   */
  public $sender;
  /**
   * @var boolean whether the event is handled. Defaults to false.
   * When a handler sets this true, the rest uninvoked handlers will not be invoked anymore.
   */
  public $handled=false;

  /**
   * Constructor.
   * @param mixed sender of the event
   */
  public function __construct($sender=null)
  {
    $this->sender=$sender;
  }
}

CEvent 只包含兩個變量 $sender 記錄事件觸發(fā)者, $handled 表示事件是否已經(jīng)被“解決”。

接著我們再看一下如何給一個組件注冊一個事件處理器:

/**
   * Attaches an event handler to an event.
   *
   * An event handler must be a valid PHP callback, i.e., a string referring to
   * a global function name, or an array containing two elements with
   * the first element being an object and the second element a method name
   * of the object.
   *
   * An event handler must be defined with the following signature,
   * pre>
   * function handlerName($event) {}
   * /pre>
   * where $event includes parameters associated with the event.
   *
   * This is a convenient method of attaching a handler to an event.
   * It is equivalent to the following code:
   * pre>
   * $component->getEventHandlers($eventName)->add($eventHandler);
   * /pre>
   *
   * Using {@link getEventHandlers}, one can also specify the excution order
   * of multiple handlers attaching to the same event. For example:
   * pre>
   * $component->getEventHandlers($eventName)->insertAt(0,$eventHandler);
   * /pre>
   * makes the handler to be invoked first.
   *
   * @param string the event name
   * @param callback the event handler
   * @throws CException if the event is not defined
   * @see detachEventHandler
   */
  public function attachEventHandler($name,$handler)
  {
    $this->getEventHandlers($name)->add($handler);
  }
  /**
   * Returns the list of attached event handlers for an event.
   * @param string the event name
   * @return CList list of attached event handlers for the event
   * @throws CException if the event is not defined
   */
  public function getEventHandlers($name)
  {
    if($this->hasEvent($name))
    {
      $name=strtolower($name);
      if(!isset($this->_e[$name]))
        //新建一個CList保存事件的處理器
        $this->_e[$name]=new CList;
      return $this->_e[$name];
    }
    else
      throw new CException(Yii::t('yii','Event "{class}.{event}" is not defined.',
        array('{class}'=>get_class($this), '{event}'=>$name)));
}

由此可以看出,首先獲取事件處理器對象,如果沒有則使用 CList ( Yii 實現(xiàn)的一個鏈表)創(chuàng)建,然后將事件處理器 add 進(jìn)這個對象中,這樣就可以在 raiseEvent 時遍歷所有的事件處理器進(jìn)行處理了,有點(diǎn)兒類似 jQuery 中注冊了多個 click 事件處理器之后,當(dāng) click 事件觸發(fā)時,會按順序調(diào)用之前注冊的事件處理器。

更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家基于Yii框架的PHP程序設(shè)計有所幫助。

您可能感興趣的文章:
  • Yii框架學(xué)習(xí)筆記之應(yīng)用組件操作示例
  • yii2高級應(yīng)用之自定義組件實現(xiàn)全局使用圖片上傳功能的方法
  • Yii框架組件和事件行為管理詳解
  • Yii擴(kuò)展組件編寫方法實例分析
  • yii2行為的方法如何注入到組件類中詳解
  • Yii框架響應(yīng)組件用法實例分析
  • Yii框架核心組件類實例詳解
  • PHP的Yii框架中移除組件所綁定的行為的方法
  • Yii框架自定義數(shù)據(jù)庫操作組件示例
  • Yii2中組件的注冊與創(chuàng)建方法
  • Yii框架應(yīng)用組件用法實例分析

標(biāo)簽:唐山 平頂山 黃山 通遼 河南 南通 武漢 隴南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Yii框架組件的事件機(jī)制原理與用法分析》,本文關(guān)鍵詞  Yii,框架,組件,的,事件,機(jī)制,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Yii框架組件的事件機(jī)制原理與用法分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于Yii框架組件的事件機(jī)制原理與用法分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    日本欧美在线视频| 国产 欧美 日韩 一区| 91视频免费在线看| 亚洲黄色av一区| xxxxx成人.com| 欧美黑人视频一区| 国产乱码精品一区二区三区卡| 日韩av日韩在线观看| 欧美一级大片| 色偷偷88888欧美精品久久久| 啊啊啊啊啊啊啊视频在线播放| 91sp网站在线观看入口| 日韩在线观看视频免费| 疯狂做受xxxx欧美肥白少妇| 日韩丰满少妇无码内射| 国产一区二区小视频| 久久久久久穴| 视频一区二区三区四区五区| 亚洲精品日韩激情在线电影| 中出视频在线观看| 欧美午夜激情在线| 日韩日韩日韩日韩日韩| zzijzzij亚洲日本成熟少妇| 激情小说亚洲一区| 精品露脸国产偷人在视频| 成人免费毛片嘿嘿连载视频…| 韩国久久久久久| 黄漫在线观看| 日韩高清专区| 国产精品久久久久久婷婷天堂| 麻豆精品在线观看| 日本欧美日韩| 欧美激情视频给我| 欧美大片日本大片免费观看| 亚洲va韩国va欧美va精四季| 啦啦啦在线视频免费观看高清中文| 精品无码国产一区二区三区51安| 欧美国产日韩一区| 久久免费av| 中文字幕美女视频| 五月婷婷伊人网| 成人全视频免费观看在线看| 人妻无码中文字幕免费视频蜜桃| 97伦伦午夜电影理伦片| 免费一级做a爰片久久毛片潮| av高清日电影| 免费日韩电影在线观看| caoporn国产| 成人爽a毛片免费啪啪动漫| 日本在线高清视频一区| 国产成人亚洲综合无码| 懂色av一区二区三区四区| 黄色网页免费看| 精品国产人妻一区二区三区| 国产亚洲综合性久久久影院| 午夜精品一区二区三区视频免费看| 亚洲国产av一区二区三区| 800av免费在线观看| 日韩欧美一区二| 欧美激情 亚洲| wwwcom羞羞网站| 青青操视频在线播放| 国内成+人亚洲| 7777kkkk成人观看| 亚洲精品第一国产综合精品| 美女羞羞视频在线观看| 国内外成人激情免费视频| 91香蕉视频在线下载| 成人在线黄色电影| 成人免费在线播放视频| 福利一区三区| 国产在线一二三| av在线不卡观看免费观看| 亚洲第一精品夜夜躁人人躁| 91精品国产91久久久久游泳池| 99久久99久久精品免费看小说.| 久久成人18免费观看| 成人欧美一区二区三区在线观看| 欧美日韩综合网| 久久香蕉国产线看观看av| www.欧美色图| 精品一区二区三区在线观看国产| 北条麻妃一区二区三区| 一区二区三区四区在线播放| 久久中文精品视频| 97视频资源在线观看| 三上悠亚一区二区| 波多野结衣一二三区| 国产ts人妖调教重口男| www.亚洲一区二区三区| 国产美女永久免费| 国产美女喷水视频| 国产精品最新| 亚洲毛片aa| 侵犯稚嫩小箩莉h文系列小说| 亚洲国产成人精品女人| 性生活一级大片| 91老师片黄在线观看| 色诱亚洲精品久久久久久| 欧美夜福利tv在线| 亚洲精品国产setv| 欧美一区二区三区性视频| 日本在线免费播放| 久久久久久**毛片大全| 欧美日韩你懂的| 黄色av网址在线播放| 国产精品久久久久影视| 婷婷丁香久久五月婷婷| 中文字幕一区二区三区久久网站| 亚洲欧美日韩在线高清直播| 日日躁夜夜躁人人揉av五月天| 香蕉国产精品偷在线观看不卡| 在线免费观看黄色网址| 欧美日韩国产大片| 东京热无码av男人的天堂| 国内精品伊人久久久久av一坑| 爽死777影院| 人妻偷人精品一区二区三区| 一个人看的www在线免费观看| 激情欧美丁香| 国产精品一国产精品最新章节| 蜜桃av乱码一区二区三区| 亚洲黄色在线播放| 国产精品免费成人| 北条麻妃国产九九九精品小说| 国产老肥熟一区二区三区| 自拍偷自拍亚洲精品被多人伦好爽| 国产av不卡一区二区| 欧美剧在线观看| 中文字幕日本在线观看| 黄色福利在线观看| 亚洲精品推荐| 日本大片在线观看| 国产精品久久久久久成人| 精品国产青草久久久久96| 精品在线视频观看| 91浏览器在线观看| 日本1区2区3区视频| 国产精品久久久久久影院8一贰佰| 欧美男女爱爱视频| 国内一区二区在线视频观看| 欧洲猛交xxxx乱大交3| 日韩激情综合| 精品无人区卡一卡二卡三乱码免费卡| 欧美精品videos另类| 欧美精品videossex性护士| 免费看男男www网站入口在线| 麻豆成人在线观看| 日本一区二区三区视频| 亚洲成人三级| 久久久久国产一区| 精品一区二区三区四| 中文综合在线观看| 欧美爱爱小视频| 日韩欧美激情| 黄色国产精品| 亚洲高清在线精品| www污网站在线观看| 欧美视频在线观看一区二区三区| 久久99精品国产麻豆不卡| 成人亚洲欧美日韩在线观看| 97国产精东麻豆人妻电影| 99久久99久久精品国产片桃花| 一级片在线免费看| 欧美97人人模人人爽人人喊视频| 精品人妻在线播放| 你懂的网站在线观看网址| 欧美另类老肥妇| 97影院理论片在线播放| 亚洲一区二区三区xxx视频| 激情小说激情视频| 亚洲欧洲日产国码av系列天堂| 欧美亚洲图片小说| 国产传媒欧美日韩成人| 国产中文字幕在线免费观看| 超碰人人人人人人人| 亚洲天堂av综合网| 成人黄18免费网站| 少妇激情av一区二区三区| 污香蕉视频在线观看| 国产高清精品二区| 亚洲乱码一区二区三区在线观看| 国产日本欧美视频| 日本黄大片在线观看| 亚洲高清视频在线播放| 成人一区二区三区仙踪林| 日韩av黄色网址| 日本熟伦人妇xxxx| 在线视频一区二区免费| 欧美洲成人男女午夜视频| 国产男男gay体育生网站| 91成人网在线观看| 97精品国产91久久久久久| 欧美bbbbb| 91av资源在线| 久草热久草热线频97精品| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产区一区二| 国产精品久久久久久婷婷天堂| 中文字幕一区视频| 久久久99精品免费观看不卡| 亚洲在线免费观看视频| 成人免费网站观看| 欧美日韩综合网| 欧美成a人片免费观看久久五月天| 东京热一区二区三区四区| 亚洲激情图片一区| 1769国内精品视频在线播放| 精品久久九九| 欧美性片在线观看| 黄色录像1级片| 四虎久久影院| 最近中文字幕免费mv视频多少集| 黄色软件在线观看| 欧美熟妇一区二区| 800av在线播放| 国产麻豆一区二区三区| 成年美女黄网站色大片不卡| 日本中文字幕视频| 亚洲欧美精品日韩欧美| 亚洲线精品久久一区二区三区| 91超碰免费在线| 给个网站可以在线观看你懂的| 欧美精品三级| 亚洲在线免费视频| 日韩国产欧美精品一区二区三区| 男人午夜视频在线观看| 欧美婷婷久久| 中文字幕av一区二区三区四区| www.黄色网址| 久久国产三级精品| 国产在线观看a| 性感美女久久精品| 亚洲国产精一区二区三区性色| 91麻豆精品国产91久久久使用方法| av电影在线观看一区二区三区| 欧美精品少妇一区二区三区| 国产精品久久久久久久龚玥菲| 中文字幕一区二区三区日韩精品| 91精品午夜视频| 日韩人妻无码精品综合区| julia中文字幕一区二区99在线| 中文字幕精品一区二区三区在线| 玖玖玖国产精品| 91|九色|视频| 免费一级欧美在线观看视频| av毛片在线看| 在线亚洲自拍| 在线免费观看日韩欧美| 999成人精品视频线3| 美女被c出白浆| 日韩午夜电影av| 九色91在线| 久久久亚洲欧洲日产国码αv| 一区二区三区中文字幕电影| 亚洲第一成肉网| 加勒比海盗1在线观看免费国语版| 日韩免费精品视频| 亚洲综合色丁香婷婷六月图片| 中文字幕一区二区三区在线观看| 天天干在线观看| 国产亚洲成av人片在线观看桃| 性xx十八spa按摩| 欧美日本精品| 亚洲丝袜av一区| 17c精品麻豆一区二区免费| 区一区二日本| 香蕉在线观看视频| 三级一区在线视频先锋| 久久久精品2019中文字幕神马| 国产精品国产三级国产有无不卡| 中文字幕日本欧美| 亚洲综合小说网| 免费观看一级一片| 国产精品对白刺激| 91精品国产777在线观看| 国产视频在线播放| 呦呦视频在线观看| 精品网站999www| 国产一级二级三级视频| 久久深夜福利| 欧美成人欧美edvon| 成人短视频在线看| 成人高清在线观看| 一区二区三区四区电影| 少妇精品视频一区二区| 少妇一级淫片免费放中国| 国产区精品在线观看| 在线观看无遮挡| 一本到一区二区三区| 亚洲伦理一区二区三区| 黄色大片免费看| 精品久久久免费| 久久久久久亚洲中文字幕无码| 综合欧美精品| 国产精品久久99久久| 亚洲成a人v欧美综合天堂| 亚洲精品中字| 亚洲欧洲精品一区二区三区| 成人18免费入口| 超碰在线97av| 免费成人在线影院| 九九热在线视频| 日韩黄色一区二区| 少妇人妻精品一区二区三区| 国产色视频一区二区三区qq号| 日韩在线视频网| 在线精品国产欧美| 麻豆av免费在线| 一区二区三区美女| av无码av天天av天天爽| 久久影院免费观看| 亚洲色图视频在线观看| 奇米精品一区二区三区在线观看一| 自拍视频国产精品| 动漫av一区| 精品国产123区| 午夜先锋成人动漫在线| 精品无码在线观看| 欧美在线1区| 欧美放荡办公室videos4k| 日本在线视频免费| 国产精品99精品无码视亚| 成人动漫视频在线| 国产高清视频在线播放| www日本视频| 黄色三级在线| 色先锋资源久久综合|