diff --git a/NEWS b/NEWS index 8c55a4095f085..7363c04058578 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2011, PHP 5.4.0 RC1 +- General improvements: + . Improve the warning message of incompatible arguments. (Laruence) + - Core: . Fixed bug #55707 (undefined reference to `__sync_fetch_and_add_4' on Linux parisc). (Felipe) diff --git a/Zend/tests/argument_restriction_001.phpt b/Zend/tests/argument_restriction_001.phpt new file mode 100644 index 0000000000000..e62ad300c97b1 --- /dev/null +++ b/Zend/tests/argument_restriction_001.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #55719 (Argument restriction should come with a more specific error message) +--FILE-- + +--EXPECTF-- +Strict Standards: Declaration of Sub::test() should be compatible with & Base::test($foo, array $bar, $option = NULL, $extra = 'llllllllll...') in %sargument_restriction_001.php on line %d diff --git a/Zend/tests/argument_restriction_002.phpt b/Zend/tests/argument_restriction_002.phpt new file mode 100644 index 0000000000000..c6a472e0f5669 --- /dev/null +++ b/Zend/tests/argument_restriction_002.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #55719 (Argument restriction should come with a more specific error message) +--FILE-- + +--EXPECTF-- +Strict Standards: Declaration of Sub::test() should be compatible with Base::test($foo, array &$bar, $option = NULL, $extra = 3.1415926535898) in %sargument_restriction_002.php on line %d diff --git a/Zend/tests/argument_restriction_003.phpt b/Zend/tests/argument_restriction_003.phpt new file mode 100644 index 0000000000000..393581fcfccfb --- /dev/null +++ b/Zend/tests/argument_restriction_003.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #55719 (Argument restriction should come with a more specific error message) +--FILE-- + +--EXPECTF-- +Strict Standards: Declaration of Sub::test() should be compatible with Base::test(Foo $foo, array $bar, $option = NULL, $extra = 'llllllllll...') in %sargument_restriction_003.php on line %d diff --git a/Zend/tests/argument_restriction_004.phpt b/Zend/tests/argument_restriction_004.phpt new file mode 100644 index 0000000000000..599b3e1604fc9 --- /dev/null +++ b/Zend/tests/argument_restriction_004.phpt @@ -0,0 +1,17 @@ +--TEST-- +Bug #55719 (Argument restriction should come with a more specific error message) +--FILE-- + +--EXPECTF-- diff --git a/Zend/tests/argument_restriction_005.phpt b/Zend/tests/argument_restriction_005.phpt new file mode 100644 index 0000000000000..2826fe6a81f6d --- /dev/null +++ b/Zend/tests/argument_restriction_005.phpt @@ -0,0 +1,11 @@ +--TEST-- +Bug #55719 (Argument restriction should come with a more specific error message) +--FILE-- + +--EXPECTF-- +Fatal error: Declaration of Sub::offsetSet() must be compatible with ArrayAccess::offsetSet($offset, $value) in %sargument_restriction_005.php on line %d diff --git a/Zend/tests/bug47981.phpt b/Zend/tests/bug47981.phpt index 2d68d3706fe96..c16ae0ffc811d 100644 --- a/Zend/tests/bug47981.phpt +++ b/Zend/tests/bug47981.phpt @@ -14,6 +14,6 @@ class b implements a { function f($a=1) {}} class c extends b {function f() {}} ?> --EXPECTF-- -string(62) "Declaration of c::f() should be compatible with that of b::f()" +string(60) "Declaration of c::f() should be compatible with b::f($a = 1)" diff --git a/Zend/tests/bug51421.phpt b/Zend/tests/bug51421.phpt index 825012a2890de..bc1758c300802 100644 --- a/Zend/tests/bug51421.phpt +++ b/Zend/tests/bug51421.phpt @@ -15,4 +15,4 @@ class Test extends TestInterface { ?> --EXPECTF-- -Fatal error: Declaration of Test::__construct() must be compatible with that of TestInterface::__construct() in %s on line %d +Fatal error: Declaration of Test::__construct() must be compatible with TestInterface::__construct(ExampleClass $var) in %s on line %d diff --git a/Zend/tests/objects_002.phpt b/Zend/tests/objects_002.phpt index 87ba0fdc3bc4c..e2db140b181cd 100644 --- a/Zend/tests/objects_002.phpt +++ b/Zend/tests/objects_002.phpt @@ -20,5 +20,5 @@ class test3 extends test { echo "Done\n"; ?> --EXPECTF-- -Strict Standards: Declaration of test3::foo() should be compatible with that of test::foo() in %s on line %d +Strict Standards: Declaration of test3::foo() should be compatible with test::foo() in %s on line %d Done diff --git a/Zend/tests/objects_003.phpt b/Zend/tests/objects_003.phpt index 1c254290f72e9..7e0f083267815 100644 --- a/Zend/tests/objects_003.phpt +++ b/Zend/tests/objects_003.phpt @@ -20,5 +20,5 @@ class test3 extends test { echo "Done\n"; ?> --EXPECTF-- -Strict Standards: Declaration of test3::foo() should be compatible with that of test::foo() in %s on line %d +Strict Standards: Declaration of test3::foo() should be compatible with test::foo($arg) in %s on line %d Done diff --git a/Zend/tests/objects_004.phpt b/Zend/tests/objects_004.phpt index 35ab4775b157b..eb04124474f6a 100644 --- a/Zend/tests/objects_004.phpt +++ b/Zend/tests/objects_004.phpt @@ -20,5 +20,5 @@ class test3 extends test { echo "Done\n"; ?> --EXPECTF-- -Strict Standards: Declaration of test3::foo() should be compatible with that of test::foo() in %s on line %d +Strict Standards: Declaration of test3::foo() should be compatible with test::foo($arg) in %s on line %d Done diff --git a/Zend/tests/objects_005.phpt b/Zend/tests/objects_005.phpt index d583c9be90d74..908e797243b3a 100644 --- a/Zend/tests/objects_005.phpt +++ b/Zend/tests/objects_005.phpt @@ -20,5 +20,5 @@ class test3 extends test { echo "Done\n"; ?> --EXPECTF-- -Strict Standards: Declaration of test3::foo() should be compatible with that of test::foo() in %s on line %d +Strict Standards: Declaration of test3::foo() should be compatible with & test::foo() in %s on line %d Done diff --git a/Zend/tests/objects_006.phpt b/Zend/tests/objects_006.phpt index fb2e28b3af674..f84a3053e991d 100644 --- a/Zend/tests/objects_006.phpt +++ b/Zend/tests/objects_006.phpt @@ -20,5 +20,5 @@ class test3 extends test { echo "Done\n"; ?> --EXPECTF-- -Strict Standards: Declaration of test3::foo() should be compatible with that of test::foo() in %s on line %d +Strict Standards: Declaration of test3::foo() should be compatible with test::foo($arg, $arg2 = NULL) in %s on line %d Done diff --git a/Zend/tests/objects_007.phpt b/Zend/tests/objects_007.phpt index 2fce04a17db3b..75e0817589edc 100644 --- a/Zend/tests/objects_007.phpt +++ b/Zend/tests/objects_007.phpt @@ -20,5 +20,5 @@ class test3 extends test { echo "Done\n"; ?> --EXPECTF-- -Strict Standards: Declaration of test3::foo() should be compatible with that of test::foo() in %s on line %d +Strict Standards: Declaration of test3::foo() should be compatible with test::foo($arg, &$arg2 = NULL) in %s on line %d Done diff --git a/Zend/tests/objects_008.phpt b/Zend/tests/objects_008.phpt index b61d16786c03c..f6d5826eb89f7 100644 --- a/Zend/tests/objects_008.phpt +++ b/Zend/tests/objects_008.phpt @@ -20,5 +20,5 @@ class test3 extends test { echo "Done\n"; ?> --EXPECTF-- -Strict Standards: Declaration of test3::foo() should be compatible with that of test::foo() in %s on line %d +Strict Standards: Declaration of test3::foo() should be compatible with test::foo(Test $arg) in %s on line %d Done diff --git a/Zend/tests/objects_009.phpt b/Zend/tests/objects_009.phpt index 5fad0046a883d..04b1118e093d7 100644 --- a/Zend/tests/objects_009.phpt +++ b/Zend/tests/objects_009.phpt @@ -20,5 +20,5 @@ class test3 extends test { echo "Done\n"; ?> --EXPECTF-- -Strict Standards: Declaration of test3::foo() should be compatible with that of test::foo() in %s on line %d +Strict Standards: Declaration of test3::foo() should be compatible with test::foo(Test $arg) in %s on line %d Done diff --git a/Zend/tests/traits/inheritance003.phpt b/Zend/tests/traits/inheritance003.phpt index ba2e4da76da77..b457a73fea631 100644 --- a/Zend/tests/traits/inheritance003.phpt +++ b/Zend/tests/traits/inheritance003.phpt @@ -35,4 +35,4 @@ $o->sayHello(array()); --EXPECTF-- World! -Fatal error: Declaration of MyHelloWorld::sayHello() must be compatible with that of Base::sayHello() in %s on line %d +Fatal error: Declaration of MyHelloWorld::sayHello() must be compatible with Base::sayHello(array $a) in %s on line %d diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 13ee9b28d08bc..83de4ea60d182 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3010,7 +3010,169 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c } /* }}} */ -static void do_inheritance_check_on_method(zend_function *child, zend_function *parent TSRMLS_DC) +#define REALLOC_BUF_IF_EXCEED(buf, offset, length, size) \ + if (UNEXPECTED(offset - buf + size >= length)) { \ + length += size + 1; \ + buf = erealloc(buf, length); \ + } + +static char * zend_get_function_declaration(zend_function *fptr TSRMLS_DC) /* {{{ */ +{ + char *offset, *buf; + zend_uint length = 1024; + + offset = buf = (char *)emalloc(length * sizeof(char)); + if (fptr->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE) { + *(offset++) = '&'; + *(offset++) = ' '; + } + + if (fptr->common.scope) { + memcpy(offset, fptr->common.scope->name, fptr->common.scope->name_length); + offset += fptr->common.scope->name_length; + *(offset++) = ':'; + *(offset++) = ':'; + } + + { + size_t name_len = strlen(fptr->common.function_name); + REALLOC_BUF_IF_EXCEED(buf, offset, length, name_len); + memcpy(offset, fptr->common.function_name, name_len); + offset += name_len; + } + + *(offset++) = '('; + if (fptr->common.arg_info) { + zend_uint i, required; + zend_arg_info *arg_info = fptr->common.arg_info; + + required = fptr->common.required_num_args; + for (i = 0; i < fptr->common.num_args;) { + if (arg_info->class_name) { + REALLOC_BUF_IF_EXCEED(buf, offset, length, arg_info->class_name_len); + memcpy(offset, arg_info->class_name, arg_info->class_name_len); + offset += arg_info->class_name_len; + *(offset++) = ' '; + } else if (arg_info->type_hint) { + zend_uint type_name_len; + char *type_name = zend_get_type_by_const(arg_info->type_hint); + type_name_len = strlen(type_name); + REALLOC_BUF_IF_EXCEED(buf, offset, length, type_name_len); + memcpy(offset, type_name, type_name_len); + offset += type_name_len; + *(offset++) = ' '; + } + + if (arg_info->pass_by_reference) { + *(offset++) = '&'; + } + *(offset++) = '$'; + + if (arg_info->name) { + REALLOC_BUF_IF_EXCEED(buf, offset, length, arg_info->name_len); + memcpy(offset, arg_info->name, arg_info->name_len); + offset += arg_info->name_len; + } else { + zend_uint idx = i; + memcpy(offset, "param", 5); + offset += 5; + do { + *(offset++) = (char) (idx % 10) + '0'; + idx /= 10; + } while (idx > 0); + } + if (i >= required) { + *(offset++) = ' '; + *(offset++) = '='; + *(offset++) = ' '; + if (fptr->type == ZEND_USER_FUNCTION) { + zend_op *precv = NULL; + { + zend_uint idx = i; + zend_op *op = ((zend_op_array *)fptr)->opcodes; + zend_op *end = op + ((zend_op_array *)fptr)->last; + + ++idx; + while (op < end) { + if ((op->opcode == ZEND_RECV || op->opcode == ZEND_RECV_INIT) + && op->op1.num == (long)idx) + { + precv = op; + } + ++op; + } + } + if (precv && precv->opcode == ZEND_RECV_INIT && precv->op2_type != IS_UNUSED) { + zval *zv, zv_copy; + int use_copy; + ALLOC_ZVAL(zv); + *zv = *precv->op2.zv; + zval_copy_ctor(zv); + INIT_PZVAL(zv); + zval_update_constant_ex(&zv, (void*)1, fptr->common.scope TSRMLS_CC); + if (Z_TYPE_P(zv) == IS_BOOL) { + if (Z_LVAL_P(zv)) { + memcpy(offset, "true", 4); + offset += 4; + } else { + memcpy(offset, "false", 5); + offset += 5; + } + } else if (Z_TYPE_P(zv) == IS_NULL) { + memcpy(offset, "NULL", 4); + offset += 4; + } else if (Z_TYPE_P(zv) == IS_STRING) { + *(offset++) = '\''; + REALLOC_BUF_IF_EXCEED(buf, offset, length, MIN(Z_STRLEN_P(zv), 10)); + memcpy(offset, Z_STRVAL_P(zv), MIN(Z_STRLEN_P(zv), 10)); + offset += MIN(Z_STRLEN_P(zv), 10); + if (Z_STRLEN_P(zv) > 10) { + *(offset++) = '.'; + *(offset++) = '.'; + *(offset++) = '.'; + } + *(offset++) = '\''; + } else { + zend_make_printable_zval(zv, &zv_copy, &use_copy); + if (Z_TYPE_P(zv) == IS_STRING) { + REALLOC_BUF_IF_EXCEED(buf, offset, length, MIN(Z_STRLEN_P(zv), Z_STRLEN_P(zv))); + memcpy(offset, Z_STRVAL_P(zv), Z_STRLEN_P(zv)); + offset += Z_STRLEN_P(zv); + } else if (Z_TYPE_P(zv) == IS_LONG) { + REALLOC_BUF_IF_EXCEED(buf, offset, length, 21); + offset += zend_sprintf(offset, "%ld", Z_LVAL_P(zv)); + } else if (Z_TYPE_P(zv) == IS_DOUBLE) { + REALLOC_BUF_IF_EXCEED(buf, offset, length, 21); + offset += zend_sprintf(offset, "%.*G", (int) EG(precision), Z_DVAL_P(zv)); + } + if (use_copy) { + zval_dtor(&zv_copy); + } + } + zval_ptr_dtor(&zv); + } + } else { + memcpy(offset, "NULL", 4); + offset += 4; + } + } + + if (++i < fptr->common.num_args) { + *(offset++) = ','; + *(offset++) = ' '; + } + arg_info++; + REALLOC_BUF_IF_EXCEED(buf, offset, length, 23); + } + } + *(offset++) = ')'; + *offset = '\0'; + + return buf; +} +/* }}} */ + +static void do_inheritance_check_on_method(zend_function *child, zend_function *parent TSRMLS_DC) /* {{{ */ { zend_uint child_flags; zend_uint parent_flags = parent->common.fn_flags; @@ -3069,14 +3231,17 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function * if (child->common.prototype && (child->common.prototype->common.fn_flags & ZEND_ACC_ABSTRACT)) { if (!zend_do_perform_implementation_check(child, child->common.prototype TSRMLS_CC)) { - zend_error(E_COMPILE_ERROR, "Declaration of %s::%s() must be compatible with that of %s::%s()", ZEND_FN_SCOPE_NAME(child), child->common.function_name, ZEND_FN_SCOPE_NAME(child->common.prototype), child->common.prototype->common.function_name); + zend_error(E_COMPILE_ERROR, "Declaration of %s::%s() must be compatible with %s", ZEND_FN_SCOPE_NAME(child), child->common.function_name, zend_get_function_declaration(child->common.prototype TSRMLS_CC)); } } else if (EG(error_reporting) & E_STRICT || EG(user_error_handler)) { /* Check E_STRICT (or custom error handler) before the check so that we save some time */ if (!zend_do_perform_implementation_check(child, parent TSRMLS_CC)) { - zend_error(E_STRICT, "Declaration of %s::%s() should be compatible with that of %s::%s()", ZEND_FN_SCOPE_NAME(child), child->common.function_name, ZEND_FN_SCOPE_NAME(parent), parent->common.function_name); + char *method_prototype = zend_get_function_declaration(child->common.prototype TSRMLS_CC); + zend_error(E_STRICT, "Declaration of %s::%s() should be compatible with %s", ZEND_FN_SCOPE_NAME(child), child->common.function_name, method_prototype); + efree(method_prototype); } } } +/* }}} */ static zend_bool do_inherit_method_check(HashTable *child_function_table, zend_function *parent, const zend_hash_key *hash_key, zend_class_entry *child_ce) /* {{{ */ { diff --git a/ext/standard/tests/filters/php_user_filter_01.phpt b/ext/standard/tests/filters/php_user_filter_01.phpt index 534b9abf323e2..e4a9c6853cdfb 100644 --- a/ext/standard/tests/filters/php_user_filter_01.phpt +++ b/ext/standard/tests/filters/php_user_filter_01.phpt @@ -14,4 +14,4 @@ class bar extends php_user_filter { } ?> --EXPECTF-- -Strict Standards: Declaration of bar::filter() should be compatible with that of php_user_filter::filter() in %s on line %d +Strict Standards: Declaration of bar::filter() should be compatible with php_user_filter::filter($in, $out, &$consumed, $closing) in %s on line %d diff --git a/ext/standard/tests/filters/php_user_filter_02.phpt b/ext/standard/tests/filters/php_user_filter_02.phpt index 73a1f026725f6..2a1dbfdadfc24 100644 --- a/ext/standard/tests/filters/php_user_filter_02.phpt +++ b/ext/standard/tests/filters/php_user_filter_02.phpt @@ -9,4 +9,4 @@ class foo extends php_user_filter { } ?> --EXPECTF-- -Strict Standards: Declaration of foo::filter() should be compatible with that of php_user_filter::filter() in %s on line %d +Strict Standards: Declaration of foo::filter() should be compatible with php_user_filter::filter($in, $out, &$consumed, $closing) in %s on line %d diff --git a/ext/standard/tests/filters/php_user_filter_03.phpt b/ext/standard/tests/filters/php_user_filter_03.phpt index 5962951eee846..e9e0266381d2d 100644 --- a/ext/standard/tests/filters/php_user_filter_03.phpt +++ b/ext/standard/tests/filters/php_user_filter_03.phpt @@ -9,4 +9,4 @@ class foo extends php_user_filter { } ?> --EXPECTF-- -Strict Standards: Declaration of foo::onCreate() should be compatible with that of php_user_filter::onCreate() in %s on line %d +Strict Standards: Declaration of foo::onCreate() should be compatible with php_user_filter::onCreate() in %s on line %d diff --git a/tests/classes/ctor_in_interface_01.phpt b/tests/classes/ctor_in_interface_01.phpt index f6f9b66eabb9d..e5ad30ebcd697 100755 --- a/tests/classes/ctor_in_interface_01.phpt +++ b/tests/classes/ctor_in_interface_01.phpt @@ -16,4 +16,4 @@ class implem implements constr ?> --EXPECTF-- -Fatal error: Declaration of implem::__construct() must be compatible with that of constr::__construct() in %s on line %d +Fatal error: Declaration of implem::__construct() must be compatible with constr::__construct() in %s on line %d diff --git a/tests/classes/ctor_in_interface_03.phpt b/tests/classes/ctor_in_interface_03.phpt index 953d6822fdf5c..ac73331207629 100755 --- a/tests/classes/ctor_in_interface_03.phpt +++ b/tests/classes/ctor_in_interface_03.phpt @@ -20,4 +20,4 @@ class derived extends implem ?> --EXPECTF-- -Fatal error: Declaration of derived::__construct() must be compatible with that of constr::__construct() in %s on line %d +Fatal error: Declaration of derived::__construct() must be compatible with constr::__construct() in %s on line %d diff --git a/tests/classes/ctor_in_interface_04.phpt b/tests/classes/ctor_in_interface_04.phpt index 0016244c18aae..94be655b83dfa 100755 --- a/tests/classes/ctor_in_interface_04.phpt +++ b/tests/classes/ctor_in_interface_04.phpt @@ -23,4 +23,4 @@ class derived extends implem ?> --EXPECTF-- -Fatal error: Declaration of derived::__construct() must be compatible with that of constr::__construct() in %s on line %d +Fatal error: Declaration of derived::__construct() must be compatible with constr::__construct() in %s on line %d diff --git a/tests/classes/inheritance_003.phpt b/tests/classes/inheritance_003.phpt index a22e5cce58f58..1f4eafa537e60 100755 --- a/tests/classes/inheritance_003.phpt +++ b/tests/classes/inheritance_003.phpt @@ -17,5 +17,5 @@ class B extends A ===DONE=== --EXPECTF-- -Strict Standards: Declaration of B::f() should be compatible with that of A::f() in %sinheritance_003.php on line %d +Strict Standards: Declaration of B::f() should be compatible with A::f($x) in %sinheritance_003.php on line %d ===DONE=== diff --git a/tests/classes/inheritance_004.phpt b/tests/classes/inheritance_004.phpt index 9c81970cc2d0c..d1f5faf5dac17 100755 --- a/tests/classes/inheritance_004.phpt +++ b/tests/classes/inheritance_004.phpt @@ -17,5 +17,5 @@ class B extends A ===DONE=== --EXPECTF-- -Strict Standards: Declaration of B::f() should be compatible with that of A::f() in %sinheritance_004.php on line %d +Strict Standards: Declaration of B::f() should be compatible with A::f() in %sinheritance_004.php on line %d ===DONE=== diff --git a/tests/classes/method_override_optional_arg_001.phpt b/tests/classes/method_override_optional_arg_001.phpt index 53272fff737ee..333c29d128903 100644 --- a/tests/classes/method_override_optional_arg_001.phpt +++ b/tests/classes/method_override_optional_arg_001.phpt @@ -28,6 +28,6 @@ $b->foo(1); ?> --EXPECTF-- -Strict Standards: Declaration of C::foo() should be compatible with that of A::foo() in %s on line %d +Strict Standards: Declaration of C::foo() should be compatible with A::foo($arg1 = 1) in %s on line %d int(1) int(3) diff --git a/tests/classes/method_override_optional_arg_002.phpt b/tests/classes/method_override_optional_arg_002.phpt index c212b8260d4ad..669a8ca836691 100644 --- a/tests/classes/method_override_optional_arg_002.phpt +++ b/tests/classes/method_override_optional_arg_002.phpt @@ -18,5 +18,5 @@ $b->foo(); ?> --EXPECTF-- -Strict Standards: Declaration of B::foo() should be compatible with that of A::foo() in %s on line %d +Strict Standards: Declaration of B::foo() should be compatible with A::foo($arg = 1) in %s on line %d foo diff --git a/tests/classes/type_hinting_005a.phpt b/tests/classes/type_hinting_005a.phpt index d487a446113ec..5e4c43b8af8ed 100644 --- a/tests/classes/type_hinting_005a.phpt +++ b/tests/classes/type_hinting_005a.phpt @@ -12,7 +12,7 @@ Class D2 extends C { function f(SomeClass $a) {} } ?> ==DONE== --EXPECTF-- -Strict Standards: Declaration of D2::f() should be compatible with that of C::f() in %s on line 8 +Strict Standards: Declaration of D2::f() should be compatible with C::f(array $a) in %s on line 8 Compatible hint. Class hint, should be array. -==DONE== \ No newline at end of file +==DONE== diff --git a/tests/classes/type_hinting_005b.phpt b/tests/classes/type_hinting_005b.phpt index bc0d7686b5e59..f13ab957bbb4e 100644 --- a/tests/classes/type_hinting_005b.phpt +++ b/tests/classes/type_hinting_005b.phpt @@ -9,6 +9,6 @@ Class D extends C { function f($a) {} } ?> ==DONE== --EXPECTF-- -Strict Standards: Declaration of D::f() should be compatible with that of C::f() in %s on line 5 +Strict Standards: Declaration of D::f() should be compatible with C::f(array $a) in %s on line 5 No hint, should be array. -==DONE== \ No newline at end of file +==DONE== diff --git a/tests/classes/type_hinting_005c.phpt b/tests/classes/type_hinting_005c.phpt index d3b72412cd84f..30a114e2a42ef 100644 --- a/tests/classes/type_hinting_005c.phpt +++ b/tests/classes/type_hinting_005c.phpt @@ -9,6 +9,6 @@ Class D extends C { function f(array $a) {} } ?> ==DONE== --EXPECTF-- -Strict Standards: Declaration of D::f() should be compatible with that of C::f() in %s on line 5 +Strict Standards: Declaration of D::f() should be compatible with C::f(SomeClass $a) in %s on line 5 Array hint, should be class. -==DONE== \ No newline at end of file +==DONE== diff --git a/tests/classes/type_hinting_005d.phpt b/tests/classes/type_hinting_005d.phpt index 60dda0ff24a9c..830054d03de10 100644 --- a/tests/classes/type_hinting_005d.phpt +++ b/tests/classes/type_hinting_005d.phpt @@ -9,6 +9,6 @@ Class D extends C { function f(array $a) {} } ?> ==DONE== --EXPECTF-- -Strict Standards: Declaration of D::f() should be compatible with that of C::f() in %s on line 5 +Strict Standards: Declaration of D::f() should be compatible with C::f($a) in %s on line 5 Array hint, should be nothing. -==DONE== \ No newline at end of file +==DONE==