Я создаю систему ловушек для приложения 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);
Для выполнения различных вызовов может быть переменное число параметров, которые должны быть переданы в обратном вызове.