婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > CodeIgniter框架鉤子機(jī)制實現(xiàn)方法【hooks類】

CodeIgniter框架鉤子機(jī)制實現(xiàn)方法【hooks類】

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

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

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

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

codeigniter的鉤子是這樣實現(xiàn)的:首先在框架的核心文件system/core/CodeIniter.php文件的 122行,載入Hooks類,接著在該文件中定義了幾個掛載點,比如pre_system(129行)、post_controller_constructor(295行)等,并在這些掛載點上面執(zhí)行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實現(xiàn)鉤子機(jī)制的方式不夠優(yōu)雅,其實完全可以使用觀察者模式來實現(xiàn)鉤子機(jī)制,將掛載點當(dāng)做監(jiān)聽的事件。

更多關(guān)于CodeIgniter相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《ThinkPHP入門教程》、《ThinkPHP常用方法總結(jié)》、《Zend FrameWork框架入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

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

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

標(biāo)簽:衡陽 白銀 綏化 辛集 崇左 鄂州 廊坊 太原

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《CodeIgniter框架鉤子機(jī)制實現(xiàn)方法【hooks類】》,本文關(guān)鍵詞  CodeIgniter,框架,鉤子,機(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)文章
  • 下面列出與本文章《CodeIgniter框架鉤子機(jī)制實現(xiàn)方法【hooks類】》相關(guān)的同類信息!
  • 本頁收集關(guān)于CodeIgniter框架鉤子機(jī)制實現(xiàn)方法【hooks類】的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    九九在线精品视频| 久久久亚洲精品一区二区三区 | 亚洲一区二区在线观看视频| 欧美午夜不卡视频| 欧美日韩国产一级片| 亚洲一区二区在线播放相泽| 日韩和欧美一区二区三区| 日本 国产 欧美色综合| 精品亚洲成av人在线观看| 91麻豆精品国产91久久久久| 日韩精品自拍偷拍| 麻豆中文一区二区| 波多野结衣精品在线| 国产精品久久99| 日韩有码一区二区三区| 欧美高清视频www夜色资源网| 日韩欧美中文字幕制服| 蜜臀av一级做a爰片久久| 成人白浆超碰人人人人| 中文字幕一区日韩精品欧美| 亚洲无人区一区| 欧美日韩在线三级| 成人av集中营| 亚洲特黄一级片| 久久精品夜色噜噜亚洲a∨| 国产精品996| 丁香五精品蜜臀久久久久99网站| 国产精品美日韩| 久久久一区二区三区| av一区二区三区四区| 99久久精品免费| 亚洲免费色视频| 午夜激情一区二区三区| 欧美精品丝袜中出| 成人一级片网址| 久久综合国产精品| 国产精品一区免费视频| 精品处破学生在线二十三| 激情另类小说区图片区视频区| 欧美一级黄色片| 国产夫妻精品视频| 欧美精品一区二区蜜臀亚洲| av不卡免费电影| 久久99九九99精品| 久久综合色8888| 日本精品免费观看高清观看| 午夜精品影院在线观看| 色呦呦国产精品| 久久尤物电影视频在线观看| 一区二区三区日韩欧美| 国产视频一区二区在线观看| 久久夜色精品一区| 成人激情开心网| 日韩欧美www| 精品一区二区三区免费播放 | 久久99国产精品免费网站| 久久精品国产精品青草| 国产精品成人免费| 偷拍亚洲欧洲综合| 亚洲欧美在线aaa| 一区二区三区在线影院| 亚洲欧美综合在线精品| 日韩av电影免费观看高清完整版| 综合激情成人伊人| 91麻豆免费观看| 欧美一区二区三区日韩视频| 国产91对白在线观看九色| 亚洲精品国产精品乱码不99| 久久久www免费人成精品| 欧美精品久久99久久在免费线| 久久精品人人做人人爽97| 日韩亚洲欧美成人一区| 欧美理论片在线| 欧美久久久久久蜜桃| 在线免费观看成人短视频| 99国产精品久久久久久久久久| 国产黄人亚洲片| 精品一区二区三区免费| 久久aⅴ国产欧美74aaa| 麻豆91在线播放免费| 亚洲电影一级黄| 国产精品色哟哟网站| 中文字幕综合网| 国产清纯白嫩初高生在线观看91 | 欧美日韩成人综合天天影院 | 亚洲精品ww久久久久久p站| 国产精品少妇自拍| 亚洲欧洲av一区二区三区久久| 中日韩免费视频中文字幕| 亚洲欧洲韩国日本视频| 亚洲日本欧美天堂| 亚洲一区二区三区自拍| 经典三级在线一区| 国产99精品视频| 成人激情小说乱人伦| 高清成人在线观看| 色悠悠久久综合| 精品视频全国免费看| 91精品国产综合久久福利软件| 日韩一区二区三区在线| 正在播放亚洲一区| 久久免费的精品国产v∧| 欧美二区三区的天堂| 日韩欧美成人一区| 亚洲婷婷国产精品电影人久久| 亚洲国产精品久久久久婷婷884| 久久草av在线| 欧洲亚洲国产日韩| 久久久久国产一区二区三区四区| 亚洲视频香蕉人妖| 亚洲美女视频在线观看| 一区二区三区日韩精品视频| 国产麻豆9l精品三级站| 成人激情av网| 色网站国产精品| 欧洲在线/亚洲| 国产精品嫩草99a| 婷婷综合另类小说色区| 国产a级毛片一区| 日韩欧美国产精品| 亚洲色图色小说| 黄页视频在线91| 在线免费观看日本欧美| 精品国产露脸精彩对白| 亚洲在线视频网站| 免费欧美在线视频| 色婷婷久久久亚洲一区二区三区| www亚洲一区| 亚洲一区二区三区中文字幕| 国产福利不卡视频| 欧美成人video| 欧美激情综合在线| 黄一区二区三区| 日韩一区二区免费高清| 肉丝袜脚交视频一区二区| 91欧美一区二区| 精品久久国产字幕高潮| 天堂在线一区二区| 欧美午夜影院一区| 亚洲欧美经典视频| 成人免费黄色大片| 337p日本欧洲亚洲大胆色噜噜| 亚洲国产日韩a在线播放性色| 91一区二区三区在线播放| 国产欧美日韩综合精品一区二区| 亚洲精品日韩专区silk| 色噜噜久久综合| 亚洲欧美在线aaa| 粉嫩av一区二区三区在线播放| 久久人人爽人人爽| 国产一区欧美二区| 欧美久久久一区| 日韩高清在线观看| 欧美一区二区三区视频| 另类小说一区二区三区| 日韩欧美在线不卡| 国产亚洲自拍一区| 岛国精品在线观看| 日本道色综合久久| 欧美一区二区在线视频| 欧美不卡在线视频| 亚洲va欧美va天堂v国产综合| 成人免费看的视频| 国产91精品露脸国语对白| 91社区在线播放| 国产亚洲欧美日韩日本| 一区二区三区四区在线播放| 久久91精品久久久久久秒播| 久久久高清一区二区三区| 国产精品一二三区| 亚洲欧洲三级电影| 色天天综合久久久久综合片| 亚洲久草在线视频| 欧亚一区二区三区| 蜜桃av一区二区| 91麻豆免费看| 天堂在线亚洲视频| 国产亚洲精品中文字幕| 波多野结衣一区二区三区| 亚洲图片有声小说| 日韩欧美激情四射| 国产精品综合二区| 国产片一区二区三区| 91麻豆文化传媒在线观看| 一区二区成人在线视频| 欧美日韩高清一区二区不卡 | 在线不卡的av| 国产麻豆视频一区二区| 亚洲人123区| 欧美xxxxx牲另类人与| 豆国产96在线|亚洲| 亚洲欧美日韩一区| 91精品欧美一区二区三区综合在| 国产黄色精品视频| 亚洲午夜免费视频| 久久久午夜精品理论片中文字幕| 色系网站成人免费| 国产精品乡下勾搭老头1| 一个色在线综合| 欧美精品一区二区久久久|