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