global statement removal: hphp/test [7/x]
[hiphop-php.git] / hphp / test / quick / call_callable.php
blob57c9ffb19475dfa470a5e942b94ef2fc3925c2c7
1 <?php
3 class Functor {
4 public function __invoke($x) {
5 return intval($x);
9 class Base {
10 private function blah() { echo 'Base::blah', "\n"; }
11 public function callInScope($x) {
12 call_user_func($x);
13 call_user_func_array($x, array());
14 $x();
18 class C extends Base {
19 private function blah() { echo __CLASS__, "\n"; }
20 public function exposeBlah() {
21 return array($this, 'blah');
24 public static function intval($x) {
25 return intval($x);
27 public function inst_intval($x) {
28 return self::intval($x);
32 class CMagic {
33 public function __call($name, $args) {
34 echo $name, ' called on instance', "\n";
35 return intval(reset(&$args));
37 public static function __callStatic($name, $args) {
38 echo $name, ' called statically', "\n";
39 return intval(reset(&$args));
44 class Foo extends Base {
45 public function get() { return array($this, 'blah'); }
48 function invoker($x) {
49 call_user_func($x);
50 $x();
53 function test_inheritance() {
54 echo ' = ', __FUNCTION__, " =\n";
56 $x = new C();
57 $x->callInScope($x->exposeBlah());
60 function test_invocation_syntaxes() {
61 echo ' = ', __FUNCTION__, " =\n";
63 $test = '10f';
64 $call_functor = new Functor();
65 $inst = new C();
66 $inst_magic = new CMagic();
67 $call_func_string = 'intval';
68 $call_static_arr = array('C', 'intval');
69 $call_static_string = 'C::intval';
70 $call_instance = array($inst, 'inst_intval');
71 $call_static_on_instance = array($inst, 'intval');
72 $call_closure = function($x) {return C::intval($x);};
73 $call_magic_static_arr = array('CMagic', 'intval');
74 $call_magic_static_string = 'CMagic::intval';
75 $call_magic_instance = array($inst_magic, 'inst_intval');
76 $call_magic_closure = function($x) {return CMagic::intval($x);};
77 $call_invalid = array('C', 'noSuchMethod');
79 echo "* call_user_func ********************\n";
80 var_dump(call_user_func($call_func_string, $test));
81 var_dump(call_user_func($call_functor, $test));
82 var_dump(call_user_func($call_closure, $test));
83 var_dump(call_user_func($call_static_string, $test));
84 var_dump(call_user_func($call_static_arr, $test));
85 var_dump(call_user_func($call_instance, $test));
86 var_dump(call_user_func($call_static_on_instance, $test));
87 var_dump(call_user_func($call_magic_closure, $test));
88 var_dump(call_user_func($call_magic_static_string, $test));
89 var_dump(call_user_func($call_magic_static_arr, $test));
90 var_dump(call_user_func($call_magic_instance, $test));
92 echo "* ()-invoke ********************\n";
93 var_dump($call_func_string($test));
94 var_dump($call_functor($test));
95 var_dump($call_closure($test));
96 var_dump($call_static_arr($test));
97 var_dump($call_instance($test));
98 var_dump($call_static_on_instance($test));
99 var_dump($call_magic_closure($test));
100 var_dump($call_magic_static_arr($test));
101 var_dump($call_magic_instance($test));
103 var_dump($call_invalid($test)); // fatals
104 var_dump($call_static_string($test)); // fatals
107 function main() {
108 test_inheritance();
109 test_invocation_syntaxes();
111 main();