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