PHP:如何实现事件处理程序?

Sal*_*ake 6 php events event-handling

我想为对象的方法添加自定义事件处理程序.

我有一个方法课.

class Post {

    public function Add($title) {

        // beforeAdd event should be called here

        echo 'Post "' . $title . '" added.';
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想向方法添加一个事件Add,并将方法的参数传递给事件处理程序.

function AddEventHandler($event, $handler){
    // What should this function do?
}

$handler = function($title){
    return strtoupper($title);
}

AddEventHandler('beforeAdd', $handler);
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?希望我的问题很明确.

小智 4

使用这里定义的函数应该很容易http://www.php.net/manual/en/book.funchand.php

特别是,您应该保留一个处理程序数组(如果您想要同一事件的多个处理程序,则保留数组的数组),然后执行类似的操作

function AddEventHandler($event, $handler){
    $handlerArray[$event] = $handler;
}
Run Code Online (Sandbox Code Playgroud)

或者

function AddEventHandler($event, $handler){
    $handlerArray[$event][] = $handler;
}
Run Code Online (Sandbox Code Playgroud)

如果有多个处理程序。

然后调用处理程序只需调用“ call_user_func ”(如果需要多个处理程序,最终在一个循环中)