* @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
//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
true
http://www.bkjia.com/PHPjc/477711.html
技術記事
[php] ?php if ( !定義(BASEPATH)) exit(直接スクリプトアクセスは許可されません); /** * CodeIgniter * * PHP 5.1.6以降用のオープンソースアプリケーション開発フレームワーク * * @packag...