我正在爲php應用程序創建一個動作鉤子系統。 這是我迄今爲止所做的。 $where
是鉤子的名稱 $priority
決定在一個鉤子位置有多個動作時所遵循的順序。 (hook::execute()
達到鉤位置時被調用,我的應用程序的核心運行在任何上癮行爲)鉤子系統的變量參數支持
class hooks{
private $hookes;
function __construct()
{
$hookes=array();
}
function add_action($where,$callback,$priority=50)
{
if(!isset($this->hookes[$where]))
$this->hookes[$where]=array();
$this->hookes[$where][$callback]=$priority;
}
function remove_action($where,$callback)
{
if(isset($this->hookes[$where][$callback]))
unset($this->hookes[$where][$callback]);
}
static function compare($a,$b)
{
return $a>$b?1:-1;
}
function execute($where)
{
if(isset($this->hookes[$where])&&is_array($this->hookes[$where]))
{
usort($this->hookes[$where],"hook::compare");
foreach($this->hookes[$where] as $callback=>$priority)
{
call_user_func($callback);
}
}
}
};
我的問題是怎樣做的execute($where)
有它接受一個變量參數列表,並通過他們在call_user_func($callback);
對於不同的要執行的調用,可能會在回調中傳遞可變數量的參數。
所以如果我通過'陣列( 「數據到過濾器」,一些-其他數據,3)'在call_user_func,它將調用功能回調爲'function_name(「data-to-filter」,some-other-data,3);'或'function_name(array(「data-to-filter」,some-other-data,3)); – 2012-03-17 08:25:39
function_name(「data-to-filter」,some-other-data,3) – Slawek 2012-03-17 08:27:38