1--TEST--
2Test is_callable() function : usage variations - undefined functions
3--SKIPIF--
4<?php
5if (!extension_loaded('json')) die("skip requires ext/json");
6?>
7--FILE--
8<?php
9/* Prototype: bool is_callable ( mixed $var [, bool $syntax_only [, string &$callable_name]] );
10   Description: Verify that the contents of a variable can be called as a function
11                In case of objects, $var = array($SomeObject, 'MethodName')
12*/
13
14/* Prototype: void check_iscallable( $functions );
15   Description: use iscallable() on given string to check for valid function name
16                returns true if valid function name, false otherwise
17*/
18function check_iscallable( $functions ) {
19  $counter = 1;
20  foreach($functions as $func) {
21    echo "-- Iteration  $counter --\n";
22    var_dump( is_callable($func) );  //given only $var argument
23    var_dump( is_callable($func, TRUE) );  //given $var and $syntax argument
24    var_dump( is_callable($func, TRUE, $callable_name) );
25    echo json_encode($callable_name) . "\n";
26    var_dump( is_callable($func, FALSE) );  //given $var and $syntax argument
27    var_dump( is_callable($func, FALSE, $callable_name) );
28    echo json_encode($callable_name) . "\n";
29    $counter++;
30  }
31}
32
33echo "\n*** Testing is_callable() on undefined functions ***\n";
34$undef_functions = array (
35  "",  //empty string
36  '',
37  " ",  //string with a space
38  ' ',
39  "12356",
40  "\0",
41  '\0',
42  "hello world",
43  'hello world',
44  "welcome\0",
45  'welcome\0',
46  "==%%%***$$$@@@!!",
47  "false",
48  "\070",
49  '\t',  //escape character
50  '\007',
51  '123',
52  'echo()'
53);
54
55/* use check_iscallable() to check whether given string is valid function name
56 * expected: true with $syntax = TRUE
57 *           false with $syntax = FALSE
58 */
59check_iscallable($undef_functions);
60
61?>
62===DONE===
63--EXPECT--
64*** Testing is_callable() on undefined functions ***
65-- Iteration  1 --
66bool(false)
67bool(true)
68bool(true)
69""
70bool(false)
71bool(false)
72""
73-- Iteration  2 --
74bool(false)
75bool(true)
76bool(true)
77""
78bool(false)
79bool(false)
80""
81-- Iteration  3 --
82bool(false)
83bool(true)
84bool(true)
85" "
86bool(false)
87bool(false)
88" "
89-- Iteration  4 --
90bool(false)
91bool(true)
92bool(true)
93" "
94bool(false)
95bool(false)
96" "
97-- Iteration  5 --
98bool(false)
99bool(true)
100bool(true)
101"12356"
102bool(false)
103bool(false)
104"12356"
105-- Iteration  6 --
106bool(false)
107bool(true)
108bool(true)
109"\u0000"
110bool(false)
111bool(false)
112"\u0000"
113-- Iteration  7 --
114bool(false)
115bool(true)
116bool(true)
117"\\0"
118bool(false)
119bool(false)
120"\\0"
121-- Iteration  8 --
122bool(false)
123bool(true)
124bool(true)
125"hello world"
126bool(false)
127bool(false)
128"hello world"
129-- Iteration  9 --
130bool(false)
131bool(true)
132bool(true)
133"hello world"
134bool(false)
135bool(false)
136"hello world"
137-- Iteration  10 --
138bool(false)
139bool(true)
140bool(true)
141"welcome\u0000"
142bool(false)
143bool(false)
144"welcome\u0000"
145-- Iteration  11 --
146bool(false)
147bool(true)
148bool(true)
149"welcome\\0"
150bool(false)
151bool(false)
152"welcome\\0"
153-- Iteration  12 --
154bool(false)
155bool(true)
156bool(true)
157"==%%%***$$$@@@!!"
158bool(false)
159bool(false)
160"==%%%***$$$@@@!!"
161-- Iteration  13 --
162bool(false)
163bool(true)
164bool(true)
165"false"
166bool(false)
167bool(false)
168"false"
169-- Iteration  14 --
170bool(false)
171bool(true)
172bool(true)
173"8"
174bool(false)
175bool(false)
176"8"
177-- Iteration  15 --
178bool(false)
179bool(true)
180bool(true)
181"\\t"
182bool(false)
183bool(false)
184"\\t"
185-- Iteration  16 --
186bool(false)
187bool(true)
188bool(true)
189"\\007"
190bool(false)
191bool(false)
192"\\007"
193-- Iteration  17 --
194bool(false)
195bool(true)
196bool(true)
197"123"
198bool(false)
199bool(false)
200"123"
201-- Iteration  18 --
202bool(false)
203bool(true)
204bool(true)
205"echo()"
206bool(false)
207bool(false)
208"echo()"
209===DONE===
210