亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 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類】的相關信息資訊供網民參考!
  • 推薦文章
    国产一区精品| 国产一级生活片| 韩国毛片免费大片| 亚洲女人国产香蕉久久精品| 九九免费高清在线观看视频| 一级毛片视频免费| 你懂的在线观看视频| 国产一区二区精品久久91| 亚洲精品中文字幕久久久久久| 精品国产香蕉在线播出 | 国产一区二区精品| 麻豆网站在线看| 国产一级生活片| 成人在免费观看视频国产| 久久精品成人一区二区三区| 欧美激情伊人| 欧美另类videosbestsex久久| 天天做日日爱夜夜爽| 国产一区精品| 韩国三级香港三级日本三级| 毛片的网站| 中文字幕一区二区三区 精品| 欧美a级大片| 毛片的网站| 美女被草网站| 精品国产一区二区三区精东影业| 日本免费看视频| 色综合久久天天综合| 国产亚洲男人的天堂在线观看| 亚洲女初尝黑人巨高清在线观看| 久久99中文字幕| 亚洲www美色| 国产精品自拍亚洲| 91麻豆国产福利精品| 天天做日日爱夜夜爽| 国产麻豆精品免费密入口| 国产视频一区二区在线播放| 欧美激情一区二区三区在线播放| 91麻豆精品国产片在线观看| 日韩女人做爰大片| 韩国毛片 免费| 韩国三级香港三级日本三级| 99久久精品国产免费| 高清一级片| 日韩免费片| 亚洲精品影院| 久久久久久久网| 91麻豆精品国产片在线观看| 国产精品免费久久| 欧美爱色| 91麻豆爱豆果冻天美星空| 国产a网| 免费一级片网站| 精品视频免费在线| 九九热精品免费观看| 免费国产在线视频| 台湾毛片| 日本特黄特色aa大片免费| 久久99中文字幕| 国产成人精品综合| 999久久久免费精品国产牛牛| 免费一级生活片| 亚洲天堂一区二区三区四区| 天天色色网| 亚洲第一视频在线播放| 国产精品1024永久免费视频 | 日韩免费在线视频| 麻豆系列国产剧在线观看| 亚洲 欧美 成人日韩| 黄视频网站免费| 国产视频一区二区三区四区| 97视频免费在线观看| 国产一区二区精品久久91| 国产高清在线精品一区a| 国产一区二区精品| 久久99爰这里有精品国产| 一级毛片视频免费| 精品视频在线观看免费| 日韩专区亚洲综合久久| 一级女人毛片人一女人| 一级女人毛片人一女人| 999精品视频在线| 精品国产香蕉在线播出 | 国产美女在线一区二区三区| 天堂网中文字幕| 国产精品1024永久免费视频 | 国产视频一区二区三区四区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 毛片的网站| 国产精品12| 国产一区二区精品久久91| 欧美日本免费| 一级毛片视频免费| 国产精品1024永久免费视频 | 精品视频在线看 | 久草免费在线视频| 国产麻豆精品hdvideoss| 天天做日日爱夜夜爽| 日韩专区在线播放| 成人免费网站久久久| 一级毛片视频免费| 999精品视频在线| 日韩女人做爰大片| 日韩专区亚洲综合久久| 美女免费精品高清毛片在线视| 精品国产一区二区三区久久久蜜臀| 四虎影视库| 色综合久久天天综合| 九九热精品免费观看| 九九干| 麻豆网站在线看| 中文字幕Aⅴ资源网| 精品在线视频播放| 九九精品影院| 亚洲不卡一区二区三区在线| 国产视频一区二区在线播放| 亚洲精品中文字幕久久久久久| 亚洲女初尝黑人巨高清在线观看| 天堂网中文字幕| 亚洲不卡一区二区三区在线| 成人免费观看视频| 国产精品自拍亚洲| 欧美另类videosbestsex久久| 成人a大片在线观看| 一级片片| 午夜家庭影院| 精品视频在线看 | 欧美日本国产| 日韩在线观看视频免费| 国产高清在线精品一区a| 黄视频网站免费| 亚飞与亚基在线观看| 午夜家庭影院| 国产成人欧美一区二区三区的| 四虎影视库| 欧美另类videosbestsex| 99久久精品费精品国产一区二区| 999久久久免费精品国产牛牛| 一级女性全黄久久生活片| 精品视频在线观看一区二区| 日韩专区亚洲综合久久| 四虎影视库| 日韩中文字幕一区二区不卡| 天天做人人爱夜夜爽2020毛片| 色综合久久天天综合| 韩国三级香港三级日本三级| 欧美另类videosbestsex| 国产亚洲精品aaa大片| 日本特黄特色aa大片免费| 日本免费看视频| 国产国语在线播放视频| 成人免费观看的视频黄页| 国产一区二区高清视频| 亚飞与亚基在线观看| a级毛片免费全部播放| 欧美一级视频免费观看| 黄视频网站在线观看| 美女免费精品高清毛片在线视| 九九久久99综合一区二区| 久久久久久久免费视频| 国产一级生活片| 青青久久精品国产免费看| 午夜欧美成人久久久久久| 国产一区二区高清视频| 精品视频在线观看一区二区三区| 国产伦精品一区三区视频 | 99色视频在线| 欧美一级视频免费观看| 日韩在线观看免费| 亚欧成人毛片一区二区三区四区| 黄色短视屏| 久久精品免视看国产明星| 成人免费高清视频| 日本在线不卡免费视频一区| 成人免费网站视频ww| 久久国产一久久高清| 日韩中文字幕在线亚洲一区| 一本高清在线| 人人干人人插| 欧美激情一区二区三区在线| 精品国产香蕉在线播出| 国产视频一区在线| 欧美国产日韩在线| 国产视频一区在线| 午夜精品国产自在现线拍| 亚洲精品久久久中文字| 国产一区二区精品久| 成人免费一级毛片在线播放视频| 99久久精品国产高清一区二区 | 四虎久久精品国产| 亚洲天堂免费观看| 国产麻豆精品| 四虎久久精品国产| 一级片免费在线观看视频| 精品国产一区二区三区久| 久久99这里只有精品国产| 色综合久久天天综合观看| 亚洲爆爽| 久久久成人网| 国产不卡精品一区二区三区|