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 [email protected] 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


Thread (15 messages)

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