在PHP中比较少的使用到监听器,个人是因为项目中涉及对其有了进一步了解,就拿实际情况进行分析吧!
还记得上一章中提到的session的问题中,因为远端session共享,我们做了监听器,
//事件侦听器
private $listener;
//创建侦听器
$this->listener = new SessListener();
//attach memcache
if ( array_key_exists('memcache', $this->servers) ) {
$this->listener->attach( 'memcache', new SessMemcacheStorage( $this->servers['memcache'] ) );
}
//attach hessian
if ( array_key_exists('hessian', $this->servers) ) {
$this->listener->attach( 'hessian', new SessHessianStorage( $this->servers['hessian'] ) );
}
$this->listener->add( $key, $value ); 进行添加
$result = $this->listener->get( $key, $this->order ); 进行获取
其对应main.php配置
'session'=>array(
'class'=>'CscSession',
'cacheID'=>'Infinispan',
'servers'=>array(
'memcache'=>array( 'host'=>'***', 'port'=>11211 ),
'hessian'=>array( 'url'=>'http:***' ),
),
),
大家很明显就可以看出,以往我们实现session是只有一个KEY值,但是现在牵涉到多个缓存的时候,我们需要一个更大的标识去指向,所以我们使用了监听器,自定义添加,修改,销毁的方法,其根源而言和你加标识确认是一样的,唯一就是面向对象的构建方便业务的更改!以后不论加文本还是其它一系列的存储方式只需要在session servers中定义一下就OK了.