php中实现事件模式
https://yq.aliyun.com/ziliao/162660
<?php class Event{ private $events = []; public function listen($name, $callback){ if(!key_exists($name, $this->events)) $this->events[$name] = $callback; } public function trigger($name){ if(key_exists($name, $this->events)){ call_user_func($name); } } } $eventManager = new Event(); function go(){ echo "go event happen!"; } $eventManager->listen('go', 'go'); //$eventManager->trigger('go'); var_dump(get_defined_functions());
------------------------------------------------------
D:wnmpwwwvidagrid_iotappwebrootevent.php:27:
array (size=2) 'internal' => array (size=1355) 0 =>
string
'zend_version' (length=12) 1 =>
string
'func_num_args' (length=13) 2 =>
string
'func_get_arg' (length=12) 3 =>
string
'func_get_args' (length=13) 4 =>
string
'strlen' (length=6) 5 =>
string
'strcmp' (length=6) 6 =>
string
'strncmp' (length=7) 7 =>
string
'strcasecmp' (length=10) 8 =>
string
'strncasecmp' (length=11) 9 =>
string
'each' (length=4) 10 =>
string
'error_reporting' (length=15) 11 =>
string
'define' (length=6) 12 =>
string
'defined' (length=7) 13 =>
string
'get_class' (length=9) 14 =>
string
'get_called_class' (length=16) 15 =>
string
'get_parent_class' (length=16) 16 =>
string
'method_exists' (length=13) 17 =>
string
'property_exists' (length=15) 18 =>
string
'class_exists' (length=12) 19 =>
string
'interface_exists' (length=16) 20 =>
string
'trait_exists' (length=12) 21 =>
string
'function_exists' (length=15) 22 =>
string
'class_alias' (length=11) 23 =>
string
'get_included_files' (length=18) 24 =>
string
'get_required_files' (length=18) 25 =>
string
'is_subclass_of' (length=14) 26 =>
string
'is_a' (length=4) 27 =>
string
'get_class_vars' (length=14) 28 =>
string
'get_object_vars' (length=15) 29 =>
string
'get_class_methods' (length=17) 30 =>
string
'trigger_error' (length=13) 31 =>
string
'user_error' (length=10) 32 =>
string
'set_error_handler' (length=17) 33 =>
string
'restore_error_handler' (length=21) 34 =>
string
'set_exception_handler' (length=21) 35 =>
string
'restore_exception_handler' (length=25) 36 =>
string
'get_declared_classes' (length=20) 37 =>
string
'get_declared_traits' (length=19) 38 =>
string
'get_declared_interfaces' (length=23) 39 =>
string
'get_defined_functions' (length=21) 40 =>
string
'get_defined_vars' (length=16) 41 =>
string
'create_function' (length=15) 42 =>
string
'get_resource_type' (length=17) 43 =>
string
'get_loaded_extensions' (length=21) 44 =>
string
'extension_loaded' (length=16) 45 =>
string
'get_extension_funcs' (length=19) 46 =>
string
'get_defined_constants' (length=21) 47 =>
string
'debug_backtrace' (length=15) 48 =>
string
'debug_print_backtrace' (length=21) 49 =>
string
'gc_collect_cycles' (length=17) 50 =>
string
'gc_enabled' (length=10) 51 =>
string
'gc_enable' (length=9) 52 =>
string
'gc_disable' (length=10) 53 =>
string
'bcadd' (length=5) 54 =>
string
'bcsub' (length=5) 55 =>
string
'bcmul' (length=5) 56 =>
string
'bcdiv' (length=5) 57 =>
string
'bcmod' (length=5) 58 =>
string
'bcpow' (length=5) 59 =>
string
'bcsqrt' (length=6) 60 =>
string
'bcscale' (length=7) 61 =>
string
'bccomp' (length=6) 62 =>
string
'bcpowmod' (length=8) 63 =>
string
'jdtogregorian' (length=13) 64 =>
string
'gregoriantojd' (length=13) 65 =>
string
'jdtojulian' (length=10) 66 =>
string
'juliantojd' (length=10) 67 =>
string
'jdtojewish' (length=10) 68 =>
string
'jewishtojd' (length=10) 69 =>
string
'jdtofrench' (length=10) 70 =>
string
'frenchtojd' (length=10) 71 =>
string
'jddayofweek' (length=11) 72 =>
string
'jdmonthname' (length=11) 73 =>
string
'easter_date' (length=11) 74 =>
string
'easter_days' (length=11) 75 =>
string
'unixtojd' (length=8) 76 =>
string
'jdtounix' (length=8) 77 =>
string
'cal_to_jd' (length=9) 78 =>
string
'cal_from_jd' (length=11) 79 =>
string
'cal_days_in_month' (length=17) 80 =>
string
'cal_info' (length=8) 81 =>
string
'ctype_alnum' (length=11) 82 =>
string
'ctype_alpha' (length=11) 83 =>
string
'ctype_cntrl' (length=11) 84 =>
string
'ctype_digit' (length=11) 85 =>
string
'ctype_lower' (length=11) 86 =>
string
'ctype_graph' (length=11) 87 =>
string
'ctype_print' (length=11) 88 =>
string
'ctype_punct' (length=11) 89 =>
string
'ctype_space' (length=11) 90 =>
string
'ctype_upper' (length=11) 91 =>
string
'ctype_xdigit' (length=12) 92 =>
string
'strtotime' (length=9) 93 =>
string
'date' (length=4) 94 =>
string
'idate' (length=5) 95 =>
string
'gmdate' (length=6) 96 =>
string
'mktime' (length=6) 97 =>
string
'gmmktime' (length=8) 98 =>
string
'checkdate' (length=9) 99 =>
string
'strftime' (length=8) 100 =>
string
'gmstrftime' (length=10) 101 =>
string
'time' (length=4) 102 =>
string
'localtime' (length=9) 103 =>
string
'getdate' (length=7) 104 =>
string
'date_create' (length=11) 105 =>
string
'date_create_immutable' (length=21) 106 =>
string
'date_create_from_format' (length=23) 107 =>
string
'date_create_immutable_from_format' (length=33) 108 =>
string
'date_parse' (length=10) 109 =>
string
'date_parse_from_format' (length=22) 110 =>
string
'date_get_last_errors' (length=20) 111 =>
string
'date_format' (length=11) 112 =>
string
'date_modify' (length=11) 113 =>
string
'date_add' (length=8) 114 =>
string
'date_sub' (length=8) 115 =>
string
'date_timezone_get' (length=17) 116 =>
string
'date_timezone_set' (length=17) 117 =>
string
'date_offset_get' (length=15) 118 =>
string
'date_diff' (length=9) 119 =>
string
'date_time_set' (length=13) 120 =>
string
'date_date_set' (length=13) 121 =>
string
'date_isodate_set' (length=16) 122 =>
string
'date_timestamp_set' (length=18) 123 =>
string
'date_timestamp_get' (length=18) 124 =>
string
'timezone_open' (length=13) 125 =>
string
'timezone_name_get' (length=17) 126 =>
string
'timezone_name_from_abbr' (length=23) 127 =>
string
'timezone_offset_get' (length=19)