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