3 function handler($name, $obj, $args, $data, &$done) {
4 echo "----HANDLER----\n";
5 var_dump($name, $obj, $args, $data, $done);
6 echo "---------------\n";
9 function passthrough_handler($name, $obj, $args, $data, &$done) {
10 echo "----HANDLER----\n";
11 var_dump($name, $obj, $args, $data, $done);
13 echo "---------------\n";
17 public function __call($name, $args) {
19 var_dump($name, $args);
28 function test_standard_function() {
29 echo '---------- ', __FUNCTION__
, ' ----------', "\n";
30 // Call once normally first; make sure translator can handle it
33 // Intercept a function
34 fb_intercept('frap', 'handler', 'data');
36 call_user_func('frap', 'callfunc');
38 fb_intercept('frap', 'passthrough_handler');
40 call_user_func('frap', 'callfunc');
42 // Replace with closure
43 fb_intercept('frap', function () { echo "Closure! wooooo\n"; });
46 // Replace with __call-having object
47 $mc = new MagicCall();
48 fb_intercept('frap', array($mc, 'i_dont_exist'));
52 fb_intercept('frap', null);
56 function var_frap($arg, ...$rest) {
57 echo "var_frap $arg "; var_dump($rest);
60 function test_variadic_function() {
61 echo '---------- ', __FUNCTION__
, ' ----------', "\n";
63 // Call once normally first; make sure translator can handle it
64 var_frap('claptrap', 'blah');
66 // Intercept a function
67 fb_intercept('var_frap', 'handler', 'data');
68 var_frap('claptrap', 'blah');
69 call_user_func('var_frap', 'callfunc');
71 fb_intercept('var_frap', 'passthrough_handler');
72 var_frap('claptrap', 'blah');
73 call_user_func('var_frap', 'callfunc');
75 // Replace with closure
76 fb_intercept('var_frap', function () { echo "Closure! wooooo\n"; });
77 var_frap('claptrap', 'blah');
79 // Replace with __call-having object
80 $mc = new MagicCall();
81 fb_intercept('var_frap', array($mc, 'i_dont_exist'));
82 var_frap('claptrap', 'blah');
85 fb_intercept('var_frap', null);
86 var_frap('claptrap', 'blah');
90 public static function sfrap() {
91 echo "static frap " . static::class . "\n";
93 public function frap() {
94 echo "non-static frap\n";
98 class SubBlark
extends Blark
{}
99 class SubBlark2
extends Blark
{}
101 function test_methods() {
102 echo '---------- ', __FUNCTION__
, ' ----------', "\n";
103 $mc = new MagicCall();
105 // Intercept static method
106 fb_intercept('SubBlark2::sfrap', 'handler');
108 call_user_func(array('Blark', 'sfrap'));
110 call_user_func(array('SubBlark', 'sfrap'));
112 call_user_func(array('SubBlark2', 'sfrap'));
114 fb_intercept('Blark::sfrap', 'handler');
116 call_user_func(array('Blark', 'sfrap'));
118 call_user_func(array('SubBlark', 'sfrap'));
120 call_user_func(array('SubBlark2', 'sfrap'));
122 fb_intercept('Blark::sfrap', 'passthrough_handler');
124 call_user_func(array('Blark', 'sfrap'));
126 fb_intercept('Blark::sfrap', array($mc, 'i_dont_exist_either'));
128 call_user_func(array('Blark', 'sfrap'));
130 // Intercept non-static method
132 fb_intercept('Blark::frap', 'handler');
134 call_user_func(array($b, 'frap'));
136 fb_intercept('Blark::frap', 'passthrough_handler');
138 call_user_func(array($b, 'frap'));
140 fb_intercept('Blark::frap', array($mc, 'i_dont_exist_either'));
142 call_user_func(array($b, 'frap'));
145 fb_intercept('frap', 'handler');
146 fb_intercept('handler', 'passthrough_handler');
150 fb_intercept('', null);
156 fb_intercept('MagicCall::__call', 'handler');
158 fb_intercept('MagicCall::__call', 'passthrough_handler');
163 test_standard_function();
164 test_variadic_function();