欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > CodeIgniter框架鉤子機制實現方法【hooks類】

CodeIgniter框架鉤子機制實現方法【hooks類】

熱門標簽:桂陽公司如何做地圖標注 神龍斗士電話機器人 企業400電話辦理多少費用 萍鄉商鋪地圖標注 合肥企業外呼系統線路 代理打電話機器人 太原400電話申請流程 電信外呼系統多少錢一個月 宿州正規外呼系統軟件

本文實例講述了CodeIgniter框架鉤子機制實現方法。分享給大家供大家參考,具體如下:

記得上一次去到喜啦面試,面試官問我一個問題:codeigniter是如何實現鉤子機制的?

當時答不上來,后來回來之后查了一些資料才明白,所以在這里記錄一下:

codeigniter的鉤子是這樣實現的:首先在框架的核心文件system/core/CodeIniter.php文件的 122行,載入Hooks類,接著在該文件中定義了幾個掛載點,比如pre_system(129行)、post_controller_constructor(295行)等,并在這些掛載點上面執行hooks類的_call_hook() 方法。

另附codeigniter的hooks類的源代碼:

?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * CodeIgniter
 *
 * An open source application development framework for PHP 5.1.6 or newer
 *
 * @package   CodeIgniter
 * @author   EllisLab Dev Team
 * @copyright    Copyright (c) 2008 - 2014, EllisLab, Inc.
 * @copyright    Copyright (c) 2014 - 2015, British Columbia Institute of Technology (http://bcit.ca/)
 * @license   http://codeigniter.com/user_guide/license.html
 * @link    http://codeigniter.com
 * @since    Version 1.0
 * @filesource
 */

// ------------------------------------------------------------------------

/**
 * CodeIgniter Hooks Class
 *
 * Provides a mechanism to extend the base system without hacking.
 *
 * @package   CodeIgniter
 * @subpackage Libraries
 * @category  Libraries
 * @author   EllisLab Dev Team
 * @link    http://codeigniter.com/user_guide/libraries/encryption.html
 */
class CI_Hooks {

  /**
   * Determines wether hooks are enabled
   *
   * @var bool
   */
  var $enabled    = FALSE;
  /**
   * List of all hooks set in config/hooks.php
   *
   * @var array
   */
  var $hooks     = array();
  /**
   * Determines wether hook is in progress, used to prevent infinte loops
   *
   * @var bool
   */
  var $in_progress  = FALSE;

  /**
   * Constructor
   *
   */
  function __construct()
  {
    $this->_initialize();
    log_message('debug', "Hooks Class Initialized");
  }

  // --------------------------------------------------------------------

  /**
   * Initialize the Hooks Preferences
   *
   * @access private
   * @return void
   */
  function _initialize()
  {
    $CFG = load_class('Config', 'core');

    // If hooks are not enabled in the config file
    // there is nothing else to do

    if ($CFG->item('enable_hooks') == FALSE)
    {
      return;
    }

    // Grab the "hooks" definition file.
    // If there are no hooks, we're done.

    if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/hooks.php'))
    {
      include(APPPATH.'config/'.ENVIRONMENT.'/hooks.php');
    }
    elseif (is_file(APPPATH.'config/hooks.php'))
    {
      include(APPPATH.'config/hooks.php');
    }


    if ( ! isset($hook) OR ! is_array($hook))
    {
      return;
    }

    $this->hooks = $hook;
    $this->enabled = TRUE;
  }

  // --------------------------------------------------------------------

  /**
   * Call Hook
   *
   * Calls a particular hook
   *
   * @access private
   * @param  string the hook name
   * @return mixed
   */
  function _call_hook($which = '')
  {
    if ( ! $this->enabled OR ! isset($this->hooks[$which]))
    {
      return FALSE;
    }

    if (isset($this->hooks[$which][0]) AND is_array($this->hooks[$which][0]))
    {
      foreach ($this->hooks[$which] as $val)
      {
        $this->_run_hook($val);
      }
    }
    else
    {
      $this->_run_hook($this->hooks[$which]);
    }

    return TRUE;
  }

  // --------------------------------------------------------------------

  /**
   * Run Hook
   *
   * Runs a particular hook
   *
   * @access private
   * @param  array  the hook details
   * @return bool
   */
  function _run_hook($data)
  {
    if ( ! is_array($data))
    {
      return FALSE;
    }

    // -----------------------------------
    // Safety - Prevents run-away loops
    // -----------------------------------

    // If the script being called happens to have the same
    // hook call within it a loop can happen

    if ($this->in_progress == TRUE)
    {
      return;
    }

    // -----------------------------------
    // Set file path
    // -----------------------------------

    if ( ! isset($data['filepath']) OR ! isset($data['filename']))
    {
      return FALSE;
    }

    $filepath = APPPATH.$data['filepath'].'/'.$data['filename'];

    if ( ! file_exists($filepath))
    {
      return FALSE;
    }

    // -----------------------------------
    // Set class/function name
    // -----------------------------------

    $class   = FALSE;
    $function = FALSE;
    $params    = '';

    if (isset($data['class']) AND $data['class'] != '')
    {
      $class = $data['class'];
    }

    if (isset($data['function']))
    {
      $function = $data['function'];
    }

    if (isset($data['params']))
    {
      $params = $data['params'];
    }

    if ($class === FALSE AND $function === FALSE)
    {
      return FALSE;
    }

    // -----------------------------------
    // Set the in_progress flag
    // -----------------------------------

    $this->in_progress = TRUE;

    // -----------------------------------
    // Call the requested class and/or function
    // -----------------------------------

    if ($class !== FALSE)
    {
      if ( ! class_exists($class))
      {
        require($filepath);
      }

      $HOOK = new $class;
      $HOOK->$function($params);
    }
    else
    {
      if ( ! function_exists($function))
      {
        require($filepath);
      }

      $function($params);
    }

    $this->in_progress = FALSE;
    return TRUE;
  }

}

// END CI_Hooks class

/* End of file Hooks.php */
/* Location: ./system/core/Hooks.php */

可以看出codeigniter實現鉤子機制的方式不夠優雅,其實完全可以使用觀察者模式來實現鉤子機制,將掛載點當做監聽的事件。

更多關于CodeIgniter相關內容感興趣的讀者可查看本站專題:《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《php優秀開發框架總結》、《ThinkPHP入門教程》、《ThinkPHP常用方法總結》、《Zend FrameWork框架入門教程》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家基于CodeIgniter框架的PHP程序設計有所幫助。

您可能感興趣的文章:
  • CodeIgniter鉤子用法實例詳解
  • CI(CodeIgniter)框架配置
  • Nginx下配置codeigniter框架方法
  • CodeIgniter框架URL路由總結
  • PHP CodeIgniter框架的工作原理研究
  • CI框架擴展系統核心類的方法分析
  • CI框架源碼解讀之利用Hook.php文件完成功能擴展的方法
  • CI框架中通過hook的方式實現簡單的權限控制
  • CI框架中libraries,helpers,hooks文件夾詳細說明

標簽:衡陽 白銀 綏化 辛集 崇左 鄂州 廊坊 太原

巨人網絡通訊聲明:本文標題《CodeIgniter框架鉤子機制實現方法【hooks類】》,本文關鍵詞  CodeIgniter,框架,鉤子,機制,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《CodeIgniter框架鉤子機制實現方法【hooks類】》相關的同類信息!
  • 本頁收集關于CodeIgniter框架鉤子機制實現方法【hooks類】的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    日本高清免费不卡视频| 日韩美女视频一区二区| 热久久久久久久| 国产精品入口麻豆| 欧美日韩一区在线观看| 亚洲免费在线电影| 97久久超碰国产精品电影| 色哟哟一区二区在线观看| 国产精品五月天| 国产精品一区不卡| 欧美一区二区三区粗大| 久久久久综合网| 国产精品66部| 国产精品国产精品88| 亚洲欧洲另类国产综合| 99精品视频一区二区| 欧美系列在线观看| 亚洲综合丁香婷婷六月香| 国产精品99精品无码视亚| 欧美性欧美巨大黑白大战| 亚洲综合视频在线观看| 国产精品偷伦视频免费观看了| 欧美美女网站色| 日韩电影免费在线| www.中文字幕av| 中文在线观看免费视频| 欧美美女直播网站| 日本欧美一区二区| 性欧美一区二区| 欧美国产一区在线| 91在线国产观看| 欧美日韩第一区日日骚| 日韩成人午夜精品| www中文在线| 亚洲天堂福利av| 无码人妻一区二区三区一| 日韩一级二级三级| 国产一区二区三区av电影| 国产少妇在线观看| 亚洲国产精品久久久男人的天堂| 亚洲国产果冻传媒av在线观看| 精品99久久久久久| 成人综合激情网| 欧美日韩一区二区电影| 日韩精品午夜视频| 91香蕉视频污在线观看| 亚洲激情自拍偷拍| 97人妻精品一区二区免费| 国产欧美一区二区三区网站| 久久久久久国产精品日本| 欧美一级精品在线| 国产成人三级在线观看| 欧美日韩一区二区三区四区| 美女脱光内衣内裤视频久久影院| 日本裸体美女视频| 亚洲宅男天堂在线观看无病毒| 青青草视频播放| 国产精品免费网站在线观看| 久久黄色一级视频| 2024国产精品视频| 91免费视频网址| www激情久久| 91在线免费播放| 2021久久国产精品不只是精品| 波多野结衣在线一区| 日韩精品中文字幕在线不卡尤物| 国产成人精品免费在线| 欧美日韩极品在线观看一区| 国产一区啦啦啦在线观看| 欧美亚日韩国产aⅴ精品中极品| 欧美aaa在线| 男人的天堂久久久| 日产国产欧美视频一区精品| 色婷婷精品久久二区二区蜜臂av| 美女脱光内衣内裤视频久久网站| 91久久精品一区二区| 国产在线精品免费| 91精品综合久久久久久| 成人午夜在线免费| 欧美videos中文字幕| 91麻豆免费看片| 国产欧美日韩精品一区| 日本黄色免费观看| 亚洲日本成人在线观看| 少妇愉情理伦三级| 亚洲444eee在线观看| 色综合天天做天天爱| 国产资源在线一区| 日韩视频免费观看高清完整版 | 最新版天堂资源在线| 国产精品欧美极品| 国产又粗又猛又爽又黄av| 亚洲成人在线免费| 色视频欧美一区二区三区| 国产一区二区三区四区五区美女 | 欧美色视频在线观看| 国产 日韩 欧美大片| 2021中文字幕一区亚洲| 亚洲制服丝袜在线播放| 一区二区三区产品免费精品久久75| 天堂а√在线中文在线鲁大师| 免费的国产精品| 91精品麻豆日日躁夜夜躁| 91免费观看国产| 一区在线观看视频| 国产又黄又粗又猛又爽的| 日本午夜一区二区| 91精品国产一区二区| 91女厕偷拍女厕偷拍高清| 国产精品午夜在线观看| 久久久久久成人网| 久久国产综合精品| 日韩三级视频在线看| 蜜臀视频在线观看| 亚洲一区二区偷拍精品| 色噜噜狠狠色综合欧洲selulu| 国产成人精品免费看| 国产亚洲成av人在线观看导航| 欧美做受高潮6| 久久se这里有精品| 精品福利在线导航| 国产人妻大战黑人20p| 麻豆成人久久精品二区三区小说| 日韩一区二区免费高清| 日韩av一二区| 日本成人在线不卡视频| 日韩欧美国产一区二区三区| 可以直接看的无码av| 欧美aaaaa成人免费观看视频| 日韩一二在线观看| 亚洲AV无码国产精品| 青草av.久久免费一区| 欧美tickling网站挠脚心| 制服 丝袜 综合 日韩 欧美| 久久成人免费电影| 久久久久99精品国产片| 国产精品夜夜夜爽阿娇| 国产成a人亚洲| 亚洲人成网站精品片在线观看 | 亚洲乱码国产乱码精品精小说| 一本色道久久综合亚洲aⅴ蜜桃 | 亚洲理论在线观看| 在线免费亚洲电影| 亚洲乱妇老熟女爽到高潮的片| 香蕉成人啪国产精品视频综合网| 欧美精品丝袜久久久中文字幕| www国产视频| 老司机午夜精品| 国产亚洲欧美一区在线观看| 国产传媒免费在线观看| 91视频免费看| 五月激情六月综合| 久久夜色精品一区| 日韩高清dvd碟片| 乳色吐息在线观看| 日本视频中文字幕一区二区三区| 欧美成人激情免费网| 久久午夜精品视频| 成人久久视频在线观看| 一级精品视频在线观看宜春院| 欧美精品视频www在线观看 | 久久亚洲精华国产精华液| 国产亚洲精品久久久久久豆腐| www.66久久| 亚洲123区在线观看| 久久只精品国产| 色婷婷香蕉在线一区二区| 国产极品一区二区| 韩国午夜理伦三级不卡影院| 亚洲欧美一区二区视频| 欧美日本国产一区| 欧美一区二区三区粗大| 91亚洲精华国产精华精华液| 青青草成人在线观看| 中文字幕一区二区三区四区 | 久久噜噜亚洲综合| 日本高清不卡aⅴ免费网站| 日本黄色动态图| 国产精品一区一区三区| 亚洲一区在线观看视频| 久久综合999| 欧美视频精品在线观看| 亚洲AV无码国产成人久久| 成人高清免费在线播放| 天堂av在线一区| 国产精品免费丝袜| 日韩一区二区三区视频| 国产高潮国产高潮久久久91| 风间由美一二三区av片| 不卡一卡二卡三乱码免费网站| 日韩电影在线观看一区| 自拍视频在线观看一区二区| 精品免费视频一区二区| 91福利社在线观看| 少妇无套高潮一二三区| 亚洲天堂av一区| 久久综合999| 欧美高清视频一二三区 | 成都免费高清电影| 91视频国产资源|