ホームページ  >  記事  >  バックエンド開発  >  CI フレームワークのソース コードの読み取り----------フック クラスhooks.php_PHP チュートリアル

CI フレームワークのソース コードの読み取り----------フック クラスhooks.php_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-14 10:09:041120ブラウズ

[php] 

/** 
* コードイグナイター
*
* PHP 5.1.6 以降用のオープンソース アプリケーション開発フレームワーク
*
* @package CodeIgniter
* @author ExpressionEngine 開発チーム
* @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since バージョン 1.0
* @filesource
 */
// ----------------------------------------------- ------------------------
/**
* CodeIgniter フッククラス
*
* ハッキングせずに基本システムを拡張するメカニズムを提供します。
* ユーザーマニュアルのアドレス: http://codeigniter.org.cn/user_guide/general/hooks.html
* @パッケージCodeIgniter
* @subpackage ライブラリ
* @category ライブラリ
* @author ExpressionEngine 開発チーム
* @link http://codeigniter.com/user_guide/libraries/encryption.html
*/
クラス CI_Hooks {
/**
* フックが有効かどうかを決定します
* フックが有効かどうかを判断します
*
* @var bool
*/
var $enabled = FALSE;  
/** 
* config/hooks.php に設定されているすべてのフックのリスト
*
* @var 配列
     */
var $hooks = array();  
/** 
* フックが進行中かどうかを決定し、無限ループを防ぐために使用されます
*
* @var bool
     */
var $in_progress = FALSE;  
/** 
* コンストラクター
*
     */
関数 __construct()
{
$this->_initialize();  
log_message('debug', "フッククラスが初期化されました");  
}
// ----------------------------------------------- ---------------------
/**
* フック設定パラメータ、環境設定を初期化します
* 初期化フック
*@アクセス非公開
* @return void
*/
関数 _initialize()
{
$CFG =&load_class('Config', 'core');  
// 設定ファイルでフックが有効になっていない場合
// 他にやることは何もありません
// 配置ファイル内にフックが設定されていない場合は、本関数を直接返します。
if ($CFG->item('enable_hooks') == FALSE)
{
戻る;  
}
// 「フック」定義ファイルを取得します。  
// 抓取钩子の定义文件
// フックがない場合は完了です。  
//hooks.php が定義されておらず、$hook 配列も定義されていない場合は、直接戻ります
if (define('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))
戻る;
}
//hooks.php の $hook 配列を $this->hooks に参照します
// $this->有効化
$this->フック =& $フック
$this->有効 = TRUE;
}
// ----------------------------------------------- --- --------------------------
/**
* コールフック
* 外部的には、_call_hook 関数が実際に呼び出され、フック プログラムが呼び出されます。
* * このメソッドでは、_run_hook が呼び出され、対応するフックが実行されます。
* 特定のフックを呼び出します
*
*@アクセス非公開
* @param string フック名
* @return 混合
*/
関数 _call_hook($that = '')
{
// $this->enabled がオンになっているかどうか、および呼び出されるフックが $htis->hooks に存在するかどうかを判断します。
if ( ! $this->enabled OR ! isset($this->hooks[$that]))
FALSE を返します。
}
// 呼び出されるフックが 2 次元配列であるかどうかを判断し、そうであればトラバースして実行します。
// 2次元配列でない場合は直接実行
// ここでは、2 次元配列を定義することで複数のフックを 1 つのフック ポイントで実行できることを説明します。
if (isset($this->hooks[$どれ][0]) AND is_array($this->フック[$どれ][0]))
foreach ($this->hooks[$that] as $val)
$this->_run_hook($val);
}
}
その他
$this->_run_hook($this->hooks[$that]);
}
TRUE を返します
}
// ----------------------------------------------- --- --------------------------
/**
* ランフック
* ランフック
* 特定のフックを実行します
*
*@アクセス非公開
* @param 配列フックの詳細
* @return bool
*/
関数_run_hook($data)
{
/*
* $data は、APPPATH/config/hook.php で定義したフック配列です
* $hook['pre_controller'] = array(
'function' => 'Myfunction'、
*
* 各フックは配列で構成される必要があるため
* そこで、$data が配列であるかどうかを判断し、そうでない場合は を返します
if ( ! is_array($data))
FALSE を返します。
}
// 安全性 - 暴走ループを防止します
// 呼び出されるスクリプトに同じものがあった場合
// フック呼び出し内でループが発生する可能性があります
何か // 特定のフックを呼び出すと、いくつかのスクリプトが実行され、おそらくこれらのスクリプトが他のフックをトリガーします
// この他のフックに現在の
が含まれている場合
// フックすると無限ループに入ります。この状況を防ぐために in_progress が存在します。
if ($this->in_progress == TRUE)
}
// data 内のデータを取り出し、APPPATH.$data['filepath'].$data['filename']; をロードします。
// ファイルパスを設定します
if ( ! isset($data['filepath']) OR ! isset($data['filename']))
FALSE を返します。
}
$filepath = APPPATH.$data['filepath'].'/'.$data['filename'];
if ( ! file_exists($filepath))
FALSE を返します。
}
// クラス/関数名を設定します
$クラス = FALSE
$関数 = FALSE
$params = ''; $ $ HOOKS OUT OUTのクラス機能パラのパラの使用を使用して使用しています - - - -
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)
FALSE を返します。
}
// in_progress フラグを設定します
// フックに対応するプログラムの実行を開始する前に、まず現在のフックのステータスを実行中に設定します。
$this->進行中 = TRUE;
// 要求されたクラスおよび/または関数を呼び出します
使用する
if ($class !== FALSE)
if ( ! class_exists($class))
require($filepath);
}
$HOOK = 新しい $class;
$HOOK->$function($params);
}
その他
if ( ! function_exists($function))
require($filepath);
}
$function($params);
} www.2cto.com
// 対応するプログラムを実行した後、現在のフックのステータスを再度非実行に変更します
// 再度トリガーできるようにします。
$this->進行中 = FALSE;
TRUE を返します
}
}
// CI_Hooks クラスを終了します
/* ファイルの終わり Hooks.php */
/* 場所: ./system/core/Hooks.php */
http://www.bkjia.com/PHPjc/477711.html
www.bkjia.com
tru​​e
http://www.bkjia.com/PHPjc/477711.html
技術記事
[php] ?php if ( !定義(BASEPATH)) exit(直接スクリプトアクセスは許可されません); /** * CodeIgniter * * PHP 5.1.6以降用のオープンソースアプリケーション開発フレームワーク * * @packag...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。