最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP 事件機(jī)制(2)

 更新時間:2011年03月23日 22:11:07   作者:  
于上一個版本的區(qū)別,把事件處理簡化,需要的朋友可以參考下。
復(fù)制代碼 代碼如下:

<?php
class Event extends stdClass{
public $target=null;
public $type=null;
/**
* 創(chuàng)建事件
* @param string $type
*/
public function __construct($type){
$this->type=trim($type);
}
/**
* 得到事件字符串
*/
public function __toString(){
return $this->type;
}
}

abstract class EventDispatcher{
private $_callback_method;
/**
* 添加事件
* @param Event $event
* @param string $method
* @param string||object $class
* @return boolean true
*/
public function attach($event,$method,$class=null){
$eventstr=(string)$event;
if($this->has($event,$method,$class))
return true;
if($class!=null){
$this->_check_method($class,$method);
$this->_callback_method[$eventstr][]=$this->_create_listener_method($eventstr,$class,$method);
}else{
$this->_check_function($method);
$this->_callback_method[$eventstr][]=$this->_create_listener_fn($eventstr,$method);
}
return true;
}
/**
* 派發(fā)事件
* @param Event $event
* @param string $method
* @param string||object $class
* @return void
*/
public function dispatch(Event $event){
$event->target=$this;
$eventstr=(string)$event;
if($this->_check_callback($eventstr)){
foreach ($this->_callback_method[$eventstr] as $v){
if($v['object']){
if(is_object($v['class'])){
$v['class']->$v['method']($event);
}else{
call_user_func(array($v['class'], $v['method']),$event);
}
}else{
$v['function']($event);
}
}
}
}
/**
* 刪除事件
* @param Event $event
* @param string $method
* @param string $class
* @return boolean true
*/
public function detact($event,$method,$class=null){
$eventstr=(string)$event;
if(!$this->_check_callback($eventstr))
return true;
if(!$this->has($event,$method,$class))
return true;
if($class!=null){
$this->_check_method($class,$method);
foreach ($this->_callback_method[$eventstr] as $k=>$v) {
if(($v==$this->_create_listener_method($eventstr,$class,$method))){
unset($this->_callback_method[$eventstr][$k]);
return true;
}
}
return true;
}else{
$this->_check_function($method);
foreach ($this->_callback_method[$eventstr] as $k=>$v) {
if(($v==$this->_create_listener_fn($eventstr,$method))){
unset($this->_callback_method[$eventstr][$k]);
return true;
}
}
return true;
}
}
/**
* 檢測事件是否監(jiān)聽
* @param Event $event
* @param string $method
* @param string $class
* @return boolean
*/
public function has($event,$method,$class=null){
$eventstr=(string)$event;
if(($class!=null)){
$this->_check_method($class,$method);
if($this->_check_callback($eventstr)){
foreach($this->_callback_method[$eventstr] as $v){
if(is_object($v['class'])){
$v_class=get_class($v['class']);
}else{
$v_class=$v['class'];
}
if(is_object($class)){
$s_class=get_class($class);
}else{
$s_class=$class;
}
$temp_v=array(
"class"=>$v_class,
"method"=>$method,
);
$temp_s=array(
"class"=>$s_class,
"method"=>$method,
);
if($temp_v==$temp_s){
return true;
}
}
}
}else{
$this->_check_function($method);
if($this->_check_callback($eventstr)){
foreach($this->_callback_method[$eventstr] as $v){
if($method==$v['function']){
return true;
}
}
}
}
return false;
}
/**
* 檢測指定類是否存在指定方法
* @param string $class
* @param string $method
* @exception Exception_Event
* @return void
*/
private function _check_method($class,$method){
if(!method_exists($class,$method)){
throw new Exception(get_class($class)." not exist ".$method." method",1);
}
}
/**
* 檢測指定函數(shù)是否存在
* @param string $function
* @return void
*/
private function _check_function($function){
if(!function_exists($function)){
throw new Exception($function." function not exist ",2);
}
}
/**
* 檢測指定事件是否存在監(jiān)聽函數(shù)
* @param string $eventstr
* @return boolean
*/
private function _check_callback($eventstr){
if(isset($this->_callback_method[$eventstr])
&&is_array($this->_callback_method[$eventstr])
){
return true;
}
return false;
}
/**
* 創(chuàng)建監(jiān)聽函數(shù)數(shù)組
* @param string $eventstr
* @param string $function
* @return array
*/
private function _create_listener_fn($eventstr,$function){
return array(
"object"=>false,
"function"=>$function,
);
}
/**
* 創(chuàng)建監(jiān)聽類數(shù)組
* @param string $eventstr
* @param string $class
* @param string $method
* @return array
*/
private function _create_listener_method($eventstr,$class,$method){
return array(
"object"=>true,
"class"=>$class,
"method"=>$method,
);
}
}



class myevent extends Event{
const aa='aaa';
}
class ball extends EventDispatcher{
public function aa(){
$event=new myevent(myevent::aa);
$this->dispatch($event);
}
}

class mytest {
public function test(){
$ball=new ball();
$ball->attach(myevent::aa,'kk');
$ball->aa();
}
public function kk($e){
print_r($e);
}
}


try{
$t=new mytest();
$t->test();
}catch (Exception $e){
echo $e->getmessage();
}

相關(guān)文章

  • 再談PHP錯誤與異常處理

    再談PHP錯誤與異常處理

    這篇文章主要介紹了再談PHP錯誤與異常處理,對錯誤和異常感興趣的同學(xué),可以參考下
    2021-04-04
  • PHP pathinfo()獲得文件的路徑、名稱等信息說明

    PHP pathinfo()獲得文件的路徑、名稱等信息說明

    在PHP中,若想通過函數(shù)獲得一個文件的路徑、名稱,或者是擴(kuò)展名等,是非常容易的一件事??梢允褂胐irname()、basename()、pathinfo()等多種途徑獲得相應(yīng)的信息。
    2011-09-09
  • php表單敏感字符過濾類

    php表單敏感字符過濾類

    這篇文章主要介紹了php表單敏感字符過濾類及其用法實(shí)例,詳細(xì)分析了表單生成與提交等環(huán)節(jié)針對敏感字符的過濾功能,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-12-12
  • Discuz 模板引擎的封裝類代碼

    Discuz 模板引擎的封裝類代碼

    需要使用Discuz的模板引擎,于是周未抽了點(diǎn)時間幫忙做了個封裝,測試了一下,速度還不錯。順便也拿來用到自己的程序中使用,歡迎大家下載并提出意見
    2008-07-07
  • php采集中國代理服務(wù)器網(wǎng)的方法

    php采集中國代理服務(wù)器網(wǎng)的方法

    這篇文章主要介紹了php采集中國代理服務(wù)器網(wǎng)的方法,涉及php采集的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • 生成ubuntu自動切換壁紙xml文件的php代碼

    生成ubuntu自動切換壁紙xml文件的php代碼

    運(yùn)行代碼后在圖片目錄下會生成yuxing.xml,方便ubuntu自動切換壁紙.
    2010-07-07
  • mac pecl 安裝php7.1擴(kuò)展教程

    mac pecl 安裝php7.1擴(kuò)展教程

    今天小編就為大家分享一篇mac pecl 安裝php7.1擴(kuò)展教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • php htmlspecialchars()與shtmlspecialchars()函數(shù)的深入分析

    php htmlspecialchars()與shtmlspecialchars()函數(shù)的深入分析

    本篇文章是對php中的htmlspecialchars()與shtmlspecialchars() 函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP彈出對話框技巧詳細(xì)解讀

    PHP彈出對話框技巧詳細(xì)解讀

    我們在實(shí)現(xiàn)PHP彈出對話框之后,一般還需要返回原來頁面或者用新的頁面替換原來的頁面等,本文將會講解詳細(xì)代碼編寫,需要的朋友可以參考下
    2015-09-09
  • php實(shí)現(xiàn)圖片按比例截取的方法

    php實(shí)現(xiàn)圖片按比例截取的方法

    這篇文章主要介紹了php實(shí)現(xiàn)圖片按比例截取的方法,涉及php針對圖形的讀取、運(yùn)算及生成相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2017-02-02

最新評論

鄱阳县| 永川市| 龙州县| 和林格尔县| 徐州市| 张北县| 彰武县| 桃园市| 金塔县| 邯郸县| 宁夏| 广南县| 隆昌县| 霍林郭勒市| 青田县| 曲阳县| 玛纳斯县| 修水县| 宁夏| 正安县| 三江| 浮梁县| 达孜县| 合水县| 鹤庆县| 沧源| 陈巴尔虎旗| 海晏县| 云阳县| 会昌县| 大同县| 湄潭县| 闸北区| 山西省| 神木县| 刚察县| 洪泽县| 灵寿县| 宜兴市| 沙洋县| 无极县|