如何实现事件监听在PHP

如何实现事件监听在PHP,第1张

如何实现事件监听,参考了jQuery的事件绑定思路,简单的实现了一下。

主要功能:

1.绑定事件 支租谨岁持一个事件绑定多个动作,支持绑定一次性事件

2.触发事件

3.注销事件

复制代码 代码如下:

class Event

{

protected static $listens = array()

public static function listen($event, $callback, $once=false){

if(!is_callable($callback)) return false

self::$listens[$event][]= array('callback'=>$callback, 'once'=>$once)

return true

}

public static function one($event, $callback){

return self::listen($event, $callback, true)

}

public static function remove($event, $index=null){

if(is_null($index))

unset(self::$listens[$event])

else

unset(self::$listens[$event][$index])

}

public static function trigger(){

if(!func_num_args()) return

$args = func_get_args()

$event = array_shift($args)

if(!isset(self::$listens[$event])) return false

foreach((array) self::$listens[$event] as $index=>$listen){

$callback = $listen['callback']

$listen['once'] &&self::remove($event, $index)

call_user_func_array($callback, $args)

}

}

}

以下是一些调用的例子:

复制代码 代码如下:

// 增加监听walk事件

Event::listen('walk', function(){

echo "I am walking...n"

})

// 增加监听walk一次性事件

Event::listen('walk', function(){

echo "I am listening...n"

}, true)

// 触发walk事件

Event::trigger('walk')

/*

I am walking...

I am listening...

*/

Event::trigger('walk')

/*

I am walking...

*/

Event::one('say', function($name=''){

echo "I am {$name}n"

})

Event::trigger('say', 'deeka')// 输出 I am deeka

Event::trigger('say', 'deeka')// not run

class Foo

{

public function bar(){

echo "Foo::bar() is calledn"

}

public function test(){

echo "Foo::foo() is called, agrs:".json_encode(func_get_args())."n"

}

}

$foo= new Foo

Event::listen('bar', array($foo, 'bar'))

Event::trigger('弊睁bar')

Event::listen('test', array($foo, 'test'))

Event::trigger('test', 1, 2, 3)

class Bar

{

public static function foo(){

echo "Bar::foo() is calledn"

}

}

Event::listen('晌凳bar1', array('Bar', 'foo'))

Event::trigger('bar1')

Event::listen('bar2', 'Bar::foo')

Event::trigger('bar2')

function bar(){

echo "bar() is calledn"

}

Event::listen('bar3', 'bar')

Event::trigger('bar3')

PHP是服务器端代码 ,html是客户端代码,实现button的onclick事件,就是客户端调用服务器端函数,因此就得向服务器提交请求。

有一种简单粗暴的方式,就是button是a标签时,可以直接在href里面写上要执行的php页面(或者通过给button绑定window.location通过JS跳转到PHP)。这源没种做法就得为每一个button设计一个PHP代码。

而我的做法是:事谈巧件+ajax 给button绑定点击雹侍纳事件,然后执行ajax。

接下来我将从按钮和图片两个方面写按钮的监听事。

先说明一下按钮的监听事件:

//定义按钮

 public Button btn

//添加监听方法

    拿迹void Start ()

    {

        btn.GetComponent  ().onClick.AddListener (TestAction)

    }

  voidTestAction ()

    {

     //写监听事件

    }

在unity场景中创建的按钮身上添加相应的按钮事件即可。

----------------------------------------------------------------------------------------------------------------------------

如何将一张普通的Image写成按钮监听事件呢?唤敏正

//定义一张图片Image  

GameObject Img

//查找 

Img= transform.Find("Image").gameObject

//添加监听事件

EventTriggerListener.Get(Img).onClick = (GameObject go) =>

  {

       //监听事件内容 

  }

 此时Unity中一个Image物体相当于一个按钮,可以做相应的事和悔件处理了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11983507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存