Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用吊钩系统的SplObserver?_Php - Fatal编程技术网

Php 如何使用吊钩系统的SplObserver?

Php 如何使用吊钩系统的SplObserver?,php,Php,我为Hook系统编写了一个类。但这已经过时了。我想用splObserver来编写代码 <?php class Event { private static $filters = []; private static $actions = []; public static function addAction($name, $callback, $priority = 10) { if (! isset(static::$actions[$

我为Hook系统编写了一个类。但这已经过时了。我想用splObserver来编写代码

<?php
class Event
{
    private static $filters = [];
    private static $actions = [];

    public static function addAction($name, $callback, $priority = 10)
    {
        if (! isset(static::$actions[$name])) {
            static::$actions[$name] = [];
        }

        static::$actions[$name][] = [
            'priority' => (int)$priority,
            'callback' => $callback,
        ];
    }

    public function doAction($name, ...$args)
    {
        $actions = isset(static::$actions[$name]) ? static::$actions[$name] : false;

        if (! $actions) {
            return;
        }

        // sort actions by priority
        $sortArr = array_map(function ($action) {
            return $action['priority'];
        }, $actions);

        \array_multisort($sortArr, $actions);

        foreach ($actions as $action) {
            \call_user_func_array($action['callback'], $args);
        }
    }
}

Event::addAction('action1', function(){
   echo 'balabala1';
});
Event::addAction('action1', function(){
   echo 'balabala2';
});
Event::doAction('action1');