10.3.ListenerBag监听器包

ListenerBag监听器包

接口

class ListenerBag implements ListenerBagInterface{
    /**
     * 监听器名称
     *
     * @var string
     */
    public $name;
    /**
     * 监听器只执行一次
     * 
     * @var bool
     */
    public $once=false;
    /**
     * 包裹监听器
     *
     * @var mixed
     */
    public $listener;
    /**
     * 构造函数
     *
     * @param mixed $listener
     * @param string $name
     */
    public function __construct($listener,$name=''){
        $this->listener=$listener;
        $this->name    =$name;
    }
}   

设置监听器名称

$listener=function(){ echo '10';};
Event::bind($hook,new ListenerBag($listener,'listener01'),10);

监听器只执行一次

$listener=function(){ echo '10';};
//
$bag=new ListenerBag($listener);
$bag->name('listener01');//监听器名称
$bag->once(true);//只执行一次
//
Event::bind($hook,$bag,10);

案例

use qing\event\ListenerBag;

class ClassA{
    public static funcA(){}
    public funcB(){}
}
$objA=new ClassA();

//闭包函数
Event::bind($hook,new ListenerBag(function(){ echo '10';}),10);

//静态函数
Event::bind($hook,new ListenerBag(['ClassA','funcA']),10);//数组
Event::bind($hook,new ListenerBag('ClassA::funcA'),10);//字符串

//对象成员函数
Event::bind($hook,new ListenerBag([$objA,'funcB']),10);