- Standard:
. Fixed bug #74005 (mail.add_x_header causes RFC-breaking lone line feed).
(Anatol)
+ . Fixed bug #73118 (is_callable callable name reports misleading value for
+ anonymous classes). (Adam Saponara)
16 Feb 2017 PHP 7.0.16
--- /dev/null
+--TEST--
+Test is_callable() function : usage variations - anonymous class method
+--FILE--
+<?php
+
+new class {
+ function __construct() {
+ $fname = null;
+ if (is_callable([$this, 'f'], false, $fname)) {
+ call_user_func($fname);
+ } else {
+ echo "dang\n";
+ }
+ }
+ function f() {
+ echo "nice\n";
+ }
+};
+
+?>
+--EXPECT--
+nice
var_dump( is_callable($func) ); //given only $var argument
var_dump( is_callable($func, TRUE) ); //given $var and $syntax argument
var_dump( is_callable($func, TRUE, $callable_name) );
- echo $callable_name, "\n";
+ echo json_encode($callable_name) . "\n";
var_dump( is_callable($func, FALSE) ); //given $var and $syntax argument
var_dump( is_callable($func, FALSE, $callable_name) );
- echo $callable_name, "\n";
+ echo json_encode($callable_name) . "\n";
$counter++;
}
}
bool(false)
bool(true)
bool(true)
-
+""
bool(false)
bool(false)
-
+""
-- Iteration 2 --
bool(false)
bool(true)
bool(true)
-
+""
bool(false)
bool(false)
-
+""
-- Iteration 3 --
bool(false)
bool(true)
bool(true)
-
+" "
bool(false)
bool(false)
-
+" "
-- Iteration 4 --
bool(false)
bool(true)
bool(true)
-
+" "
bool(false)
bool(false)
-
+" "
-- Iteration 5 --
bool(false)
bool(true)
bool(true)
-12356
+"12356"
bool(false)
bool(false)
-12356
+"12356"
-- Iteration 6 --
bool(false)
bool(true)
bool(true)
-
+"\u0000"
bool(false)
bool(false)
-
+"\u0000"
-- Iteration 7 --
bool(false)
bool(true)
bool(true)
-\0
+"\\0"
bool(false)
bool(false)
-\0
+"\\0"
-- Iteration 8 --
bool(false)
bool(true)
bool(true)
-hello world
+"hello world"
bool(false)
bool(false)
-hello world
+"hello world"
-- Iteration 9 --
bool(false)
bool(true)
bool(true)
-hello world
+"hello world"
bool(false)
bool(false)
-hello world
+"hello world"
-- Iteration 10 --
bool(false)
bool(true)
bool(true)
-welcome
+"welcome\u0000"
bool(false)
bool(false)
-welcome
+"welcome\u0000"
-- Iteration 11 --
bool(false)
bool(true)
bool(true)
-welcome\0
+"welcome\\0"
bool(false)
bool(false)
-welcome\0
+"welcome\\0"
-- Iteration 12 --
bool(false)
bool(true)
bool(true)
-==%%%***$$$@@@!!
+"==%%%***$$$@@@!!"
bool(false)
bool(false)
-==%%%***$$$@@@!!
+"==%%%***$$$@@@!!"
-- Iteration 13 --
bool(false)
bool(true)
bool(true)
-false
+"false"
bool(false)
bool(false)
-false
+"false"
-- Iteration 14 --
bool(false)
bool(true)
bool(true)
-8
+"8"
bool(false)
bool(false)
-8
+"8"
-- Iteration 15 --
bool(false)
bool(true)
bool(true)
-\t
+"\\t"
bool(false)
bool(false)
-\t
+"\\t"
-- Iteration 16 --
bool(false)
bool(true)
bool(true)
-\007
+"\\007"
bool(false)
bool(false)
-\007
+"\\007"
-- Iteration 17 --
bool(false)
bool(true)
bool(true)
-123
+"123"
bool(false)
bool(false)
-123
+"123"
-- Iteration 18 --
bool(false)
bool(true)
bool(true)
-echo()
+"echo()"
bool(false)
bool(false)
-echo()
-===DONE===
\ No newline at end of file
+"echo()"
+===DONE===
if (ZEND_NUM_ARGS() > 2) {
retval = zend_is_callable_ex(var, NULL, check_flags, &name, NULL, &error);
zval_dtor(callable_name);
- //??? is it necessary to be consistent with old PHP ("\0" support)
- if (UNEXPECTED(ZSTR_LEN(name)) != strlen(ZSTR_VAL(name))) {
- ZVAL_STRINGL(callable_name, ZSTR_VAL(name), strlen(ZSTR_VAL(name)));
- zend_string_release(name);
- } else {
- ZVAL_STR(callable_name, name);
- }
+ ZVAL_STR(callable_name, name);
} else {
retval = zend_is_callable_ex(var, NULL, check_flags, NULL, NULL, &error);
}