本文实例讲述了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程序设计有所帮助。