zoukankan      html  css  js  c++  java
  • 利用回掉函数增强可扩展性

    <?php 
    
    class Listener
    {	
    	public static function handle()
    	{
    		static $count = 0;
    		return function(Event $event) use ($count) {
    			echo "eventName=" . $event->name . " and count=" . $count . "-----in listener function<br>";
    			$count += 1;
    		};
    	}
    
    }
    
    
    abstract class Event
    {
    	public $name;
    	public $callback = [];
    
    	public function __construct($name)
    	{
    		$this->name = $name;
    	}
    	
    	public function registerListener(Closure $callback)
    	{
    		if(! is_callable($callback)) {
    			throw new Exception("callback is not callable", 1);
    		}
    		$this->callback[] = $callback;
    	}
    
    	public function setUp()
    	{
    		static::handle();
    		foreach ($this->callback as $callback) {
    			call_user_func($callback, $this);
    		}
    	}
    
    	abstract public function handle();
    }
    
    class SaleEvent extends Event
    {
    	
    	public function handle()
    	{
    		echo "handle function in SaleEvent<br>";
    	}
    }
    function init()
    {
    	return $kernel = [
    		'SaleEvent' => [
    			'Listener',
    		]
    	];
    }
    function event(Event $event)
    {
    	$relations = init();
    	$className = get_class($event);
    	$listeners = $relations[$className];
    	foreach ($listeners as $value) {
    		$event->registerListener($value::handle());
    	}
    	return $event->setUp();
    }
    
    event(new SaleEvent('saled'));

      

    这样以后如果有其他监听该事件的listener,直接添加进kernel数组即可。
  • 相关阅读:
    JAVA环境变量的配置
    中国大学MOOC-翁恺-C语言程序设计习题集-解答汇总
    1009. 说反话 (20)
    akoj-1162-计算表达式
    akoj-1153-p次方求和
    akoj-1055-矩阵乘法
    akoj-1076-Encoding
    C语言程序设计进阶 翁恺 第4周编程练习
    akoj-1272-字母统计
    akoj-1267-独木舟上的荡漾
  • 原文地址:https://www.cnblogs.com/buerr/p/6953104.html
Copyright © 2011-2022 走看看