看到JavaScript中的监听事件不错于是想到这个可以在PHP里面实现吗?
首先谈一下个人对PHP中容器的粗略见解:
容器就是在一个容器类的static数组属性里面操作那些注册的类,如下:

// 容器类
class Container
{
    private $s = array();

    function __set($k, $c)
    {
        $this->s[$k] = $c;
    }

    function __get($k)
    {
        return $this->s[$k]($this);
    }
}
// 对容器的操作
$c = new Container();
$c->bim = function () {
    return new Bim();
};
$c->bar = function ($c) {
    return new Bar($c->bim);
};
$c->foo = function ($c) {
    return new Foo($c->bar);
};
// 从容器中取得Foo
$foo = $c->foo;
$foo->doSomething(); // Bim::doSomething|Bar::doSomething|Foo::doSomething

而今天要说的事件监听跟容器的实现放大基本上一致,也是对一个类的static数组属性进行操作,代码如下:

class MyClass
{
    public static function fnCallBack( $msg1 , $msg2 )
    {
        echo 'msg1:'.$msg1;
        echo "<br />\n";
        echo 'msg2:'.$msg2;
    }
}

$className = 'MyClass';
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' );
call_user_func_array( array( $className , $fnName ) , $params );

其中call_user_func_array函数是PHP自带的,调用定义好的函数,第一个参数是方法名称,第二个参数是要调用函数用到的参数,具体详解请参考PHP手册,若call_user_func_array需要调用类里面的函数,则该函数必须是static,或者是已经实例化的类。
参考链接

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐