Commit:    d8792d87cf978ef2a977362a7ef8f357820867c2
Author:    Xinchen Hui <larue...@php.net>         Mon, 10 Jun 2013 21:26:11 
+0800
Parents:   53c39e2b4ed32b508763a4db18fd918ab0d036ca
Branches:  PHP-5.4 PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=d8792d87cf978ef2a977362a7ef8f357820867c2

Log:
Fixed bug #64988 (Class loading order affects E_STRICT warning)

Bugs:
https://bugs.php.net/64988

Changed paths:
  M  NEWS
  A  Zend/tests/bug64988.phpt
  M  Zend/zend_compile.c


Diff:
diff --git a/NEWS b/NEWS
index 60af878..567c81b 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ PHP                                                             
           NEWS
 ?? ??? 2013, PHP 5.4.17
 
 - 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 #64960 (Segfault in gc_zval_possible_root). (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 0000000..34fd482
--- /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 3959517..ab6020c 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3267,11 +3267,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);
                }


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to