本文实例讲述了PHP实现事件机制的方法。分享给大家供大家参考。具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<?php
/**
* 事件
*/
class Event {
private $callbacks = array ();
private $holder ;
function __construct() {
$bt = debug_backtrace();
if ( count ( $bt ) < 2) {
$this ->holder = null;
return ;
}
$this ->holder = & $bt [1][ 'object' ];
}
function attach() {
$args = func_get_args();
switch ( count ( $args )) {
case 1:
if ( is_callable ( $args [0])) {
$this ->callbacks[]= $args [0];
return ;
}
break ;
case 2:
if ( is_object ( $args [0]) && is_string ( $args [1])) {
$this ->callbacks[]= array (& $args [0], $args [1]);
}
return ;
default :
return ;
}
}
function notify() {
$bt = debug_backtrace();
if ( $this ->holder &&
(( count ( $bt ) >= 2 && $bt [ count ( $bt ) - 1][ 'object' ] !== $this ->holder)
|| ( count ( $bt ) < 2))) {
throw ( new Exception( 'Notify can only be called in holder' ));
}
foreach ( $this ->callbacks as $callback ) {
$args = func_get_args();
call_user_func_array( $callback , $args );
}
}
}
|
希望本文所述对大家的php程序设计有所帮助。