cvs: ZendEngine2 / zend_compile.c php-src/tests/classes ctor_in_interface_01.phpt ctor_in_interface_02.phpt ctor_in_interface_03.phpt
ctor_in_interface_04.phpt interface_construct.phpt

From: Date: Sun, 05 Mar 2006 18:23:56 +0000
Subject: cvs: ZendEngine2 / zend_compile.c php-src/tests/classes ctor_in_interface_01.phpt ctor_in_interface_02.phpt ctor_in_interface_03.phpt
ctor_in_interface_04.phpt interface_construct.phpt
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-4673@lists.php.net to get a copy of this message
helly Sun Mar 5 18:23:56 2006 UTC Added files: /php-src/tests/classes ctor_in_interface_01.phpt ctor_in_interface_02.phpt ctor_in_interface_03.phpt ctor_in_interface_04.phpt Removed files: /php-src/tests/classes interface_construct.phpt Modified files: /ZendEngine2 zend_compile.c Log: - Fix Bug #34019 by popular demand: Implementing interface with a __construct method strange behaviour http://cvs.php.net/viewcvs.cgi/ZendEngine2/zend_compile.c?r1=1.689&r2=1.690&diff_format=u Index: ZendEngine2/zend_compile.c diff -u ZendEngine2/zend_compile.c:1.689 ZendEngine2/zend_compile.c:1.690 --- ZendEngine2/zend_compile.c:1.689 Fri Mar 3 13:09:13 2006 +++ ZendEngine2/zend_compile.c Sun Mar 5 18:23:56 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_compile.c,v 1.689 2006/03/03 13:09:13 dmitry Exp $ */ +/* $Id: zend_compile.c,v 1.690 2006/03/05 18:23:56 helly Exp $ */ #include <zend_language_parser.h> #include "zend.h" @@ -2055,7 +2055,7 @@ } /* No implementation checks for constructors */ - if (fe->common.fn_flags & ZEND_ACC_CTOR) { + if ((fe->common.fn_flags & ZEND_ACC_CTOR) && !(proto->common.scope->ce_flags & ZEND_ACC_INTERFACE)) { return 1; } http://cvs.php.net/viewcvs.cgi/php-src/tests/classes/ctor_in_interface_01.phpt?view=markup&rev=1.1 Index: php-src/tests/classes/ctor_in_interface_01.phpt +++ php-src/tests/classes/ctor_in_interface_01.phpt --TEST-- ZE2 A class constructor must keep the signature of an interface --FILE-- <?php interface constr { function __construct(); } class implem implements constr { function __construct($a) { } } ?> --EXPECTF-- Fatal error: Declaration of implem::__construct() must be compatible with that of constr::__construct() in %s on line %d http://cvs.php.net/viewcvs.cgi/php-src/tests/classes/ctor_in_interface_02.phpt?view=markup&rev=1.1 Index: php-src/tests/classes/ctor_in_interface_02.phpt +++ php-src/tests/classes/ctor_in_interface_02.phpt --TEST-- ZE2 A class constructor must keep the signature of all interfaces --FILE-- <?php interface constr1 { function __construct(); } interface constr2 extends constr1 { } class implem12 implements constr2 { function __construct() { } } interface constr3 { function __construct($a); } class implem13 implements constr1, constr3 { function __construct() { } } ?> --EXPECTF-- Fatal error: Can't inherit abstract function constr3::__construct() (previously declared abstract in constr1) in %s on line %d http://cvs.php.net/viewcvs.cgi/php-src/tests/classes/ctor_in_interface_03.phpt?view=markup&rev=1.1 Index: php-src/tests/classes/ctor_in_interface_03.phpt +++ php-src/tests/classes/ctor_in_interface_03.phpt --TEST-- ZE2 A class constructor must keep the signature of base class interfaces --FILE-- <?php interface constr { function __construct(); } abstract class implem implements constr { } class derived extends implem { function __construct($a) { } } ?> --EXPECTF-- Fatal error: Declaration of derived::__construct() must be compatible with that of constr::__construct() in %s on line %d http://cvs.php.net/viewcvs.cgi/php-src/tests/classes/ctor_in_interface_04.phpt?view=markup&rev=1.1 Index: php-src/tests/classes/ctor_in_interface_04.phpt +++ php-src/tests/classes/ctor_in_interface_04.phpt --TEST-- ZE2 A class constructor must keep the signature of base class interfaces --FILE-- <?php interface constr { function __construct(); } class implem implements constr { function __construct() { } } class derived extends implem { function __construct($a) { } } ?> --EXPECTF-- Fatal error: Declaration of derived::__construct() must be compatible with that of constr::__construct() in %s on line %d

« previous php.zend-engine.cvs (#4673) next »