summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2013-06-10 21:31:25 +0800
committerXinchen Hui <laruence@php.net>2013-06-10 21:31:25 +0800
commita9d005c04e73621f81d441ef7afaae0dca18a58c (patch)
tree6b1f7deda59c3cbdd14a0786b991e62eded9c3c4
parent46d3738d0a0584e40a067bf88fe3b17df9e9e2b2 (diff)
parentd8792d87cf978ef2a977362a7ef8f357820867c2 (diff)
downloadphp-git-a9d005c04e73621f81d441ef7afaae0dca18a58c.tar.gz
Merge branch 'PHP-5.4' into PHP-5.5
Conflicts: Zend/zend_compile.c
-rw-r--r--NEWS1
-rw-r--r--Zend/tests/bug64988.phpt30
-rw-r--r--Zend/zend_compile.c4
3 files changed, 33 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index b2cb8c2eca..757e9185f6 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ PHP NEWS
?? ??? 2013, PHP 5.5.0 Release Candidate 4
- Core:
+ . Fixed bug #64988 (Class loading order affects E_STRICT warning). (Laruence)
. Fixed bug #64966 (segfault in zend_do_fcall_common_helper_SPEC). (Laruence)
. Fixed bug #64934 (Apache2 TS crash with get_browser()). (Anatol)
diff --git a/Zend/tests/bug64988.phpt b/Zend/tests/bug64988.phpt
new file mode 100644
index 0000000000..34fd482f38
--- /dev/null
+++ b/Zend/tests/bug64988.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Bug #64988 (Class loading order affects E_STRICT warning)
+--FILE--
+<?php
+abstract class Base1 {
+ public function insert(array $data){
+ return array_reverse($data);
+ }
+}
+
+class Noisy1 extends Base1 {
+ public function insert(array $data, $option1 = Null) {
+ if (!empty($option1)) {
+ $data['option1'] = $option1;
+ }
+ return parent::insert($data);
+ }
+}
+class Smooth1 extends Noisy1 {
+ public function insert(array $data) {
+ return parent::insert($data, count($data));
+ }
+}
+
+$o = new Smooth1();
+echo "okey";
+?>
+--EXPECTF--
+Strict Standards: Declaration of Smooth1::insert() should be compatible with Noisy1::insert(array $data, $option1 = NULL) in %sbug64988.php on line 20
+okey
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 8674f92471..a2aa909f15 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3464,11 +3464,11 @@ 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 %s", ZEND_FN_SCOPE_NAME(child), child->common.function_name, zend_get_function_declaration(child->common.prototype? child->common.prototype : parent TSRMLS_CC));
+ 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)) {
- char *method_prototype = zend_get_function_declaration(child->common.prototype? child->common.prototype : parent TSRMLS_CC);
+ char *method_prototype = zend_get_function_declaration(parent 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);
}