FAQ
Hi,
On Sat, 2010-06-26 at 22:05 +0000, Felipe Pena wrote:
felipe Sat, 26 Jun 2010 22:05:13 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=300770

Log:
- Fixed bug #51421 (Abstract __construct constructor argument list not enforced)

Bug: http://bugs.php.net/51421 (Closed) Abstract __construct constructor argument list not enforced
Won't this break compatibility?

I'd say the change is logically correct but not sure we should break BC
there during RC.

johannes
Changed paths:
A php/php-src/branches/PHP_5_2/Zend/tests/bug51421.phpt
U php/php-src/branches/PHP_5_2/Zend/zend_compile.c
A php/php-src/branches/PHP_5_3/Zend/tests/bug51421.phpt
U php/php-src/branches/PHP_5_3/Zend/zend_compile.c
A php/php-src/trunk/Zend/tests/bug51421.phpt
U php/php-src/trunk/Zend/zend_compile.c

Added: php/php-src/branches/PHP_5_2/Zend/tests/bug51421.phpt
===================================================================
--- php/php-src/branches/PHP_5_2/Zend/tests/bug51421.phpt (rev 0)
+++ php/php-src/branches/PHP_5_2/Zend/tests/bug51421.phpt 2010-06-26 22:05:13 UTC (rev 300770)
@@ -0,0 +1,18 @@
+--TEST--
+Bug #51421 (Abstract __construct constructor argument list not enforced)
+--FILE--
+<?php
+
+class ExampleClass {}
+
+abstract class TestInterface {
+ abstract public function __construct(ExampleClass $var);
+}
+
+class Test extends TestInterface {
+ public function __construct() {}
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of Test::__construct() must be compatible with that of TestInterface::__construct() in %s on line %d


Property changes on: php/php-src/branches/PHP_5_2/Zend/tests/bug51421.phpt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Revision
Added: svn:eol-style
+ native

Modified: php/php-src/branches/PHP_5_2/Zend/zend_compile.c
===================================================================
--- php/php-src/branches/PHP_5_2/Zend/zend_compile.c 2010-06-26 21:29:56 UTC (rev 300769)
+++ php/php-src/branches/PHP_5_2/Zend/zend_compile.c 2010-06-26 22:05:13 UTC (rev 300770)
@@ -2009,13 +2009,20 @@
{
zend_uint i;

- /* If it's a user function then arg_info == NULL means we don't have any parameters but we still need to do the arg number checks. We are only willing to ignore this for internal functions because extensions don't always define arg_info. */
+ /* If it's a user function then arg_info == NULL means we don't have any parameters but
+ * we still need to do the arg number checks. We are only willing to ignore this for internal
+ * functions because extensions don't always define arg_info.
+ */
if (!proto || (!proto->common.arg_info && proto->common.type != ZEND_USER_FUNCTION)) {
return 1;
}

- /* Checks for constructors only if they are declared in an interface */
- if ((fe->common.fn_flags & ZEND_ACC_CTOR) && !(proto->common.scope->ce_flags & ZEND_ACC_INTERFACE)) {
+ /* Checks for constructors only if they are declared in an interface,
+ * or explicitly marked as abstract
+ */
+ if ((fe->common.fn_flags & ZEND_ACC_CTOR)
+ && ((proto->common.scope->ce_flags & ZEND_ACC_INTERFACE) == 0
+ && (proto->common.fn_flags & ZEND_ACC_ABSTRACT) == 0)) {
return 1;
}


Added: php/php-src/branches/PHP_5_3/Zend/tests/bug51421.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/Zend/tests/bug51421.phpt (rev 0)
+++ php/php-src/branches/PHP_5_3/Zend/tests/bug51421.phpt 2010-06-26 22:05:13 UTC (rev 300770)
@@ -0,0 +1,18 @@
+--TEST--
+Bug #51421 (Abstract __construct constructor argument list not enforced)
+--FILE--
+<?php
+
+class ExampleClass {}
+
+abstract class TestInterface {
+ abstract public function __construct(ExampleClass $var);
+}
+
+class Test extends TestInterface {
+ public function __construct() {}
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of Test::__construct() must be compatible with that of TestInterface::__construct() in %s on line %d


Property changes on: php/php-src/branches/PHP_5_3/Zend/tests/bug51421.phpt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Revision
Added: svn:eol-style
+ native

Modified: php/php-src/branches/PHP_5_3/Zend/zend_compile.c
===================================================================
--- php/php-src/branches/PHP_5_3/Zend/zend_compile.c 2010-06-26 21:29:56 UTC (rev 300769)
+++ php/php-src/branches/PHP_5_3/Zend/zend_compile.c 2010-06-26 22:05:13 UTC (rev 300770)
@@ -2532,13 +2532,20 @@
{
zend_uint i;

- /* If it's a user function then arg_info == NULL means we don't have any parameters but we still need to do the arg number checks. We are only willing to ignore this for internal functions because extensions don't always define arg_info. */
+ /* If it's a user function then arg_info == NULL means we don't have any parameters but
+ * we still need to do the arg number checks. We are only willing to ignore this for internal
+ * functions because extensions don't always define arg_info.
+ */
if (!proto || (!proto->common.arg_info && proto->common.type != ZEND_USER_FUNCTION)) {
return 1;
}

- /* Checks for constructors only if they are declared in an interface */
- if ((fe->common.fn_flags & ZEND_ACC_CTOR) && !(proto->common.scope->ce_flags & ZEND_ACC_INTERFACE)) {
+ /* Checks for constructors only if they are declared in an interface,
+ * or explicitly marked as abstract
+ */
+ if ((fe->common.fn_flags & ZEND_ACC_CTOR)
+ && ((proto->common.scope->ce_flags & ZEND_ACC_INTERFACE) == 0
+ && (proto->common.fn_flags & ZEND_ACC_ABSTRACT) == 0)) {
return 1;
}


Added: php/php-src/trunk/Zend/tests/bug51421.phpt
===================================================================
--- php/php-src/trunk/Zend/tests/bug51421.phpt (rev 0)
+++ php/php-src/trunk/Zend/tests/bug51421.phpt 2010-06-26 22:05:13 UTC (rev 300770)
@@ -0,0 +1,18 @@
+--TEST--
+Bug #51421 (Abstract __construct constructor argument list not enforced)
+--FILE--
+<?php
+
+class ExampleClass {}
+
+abstract class TestInterface {
+ abstract public function __construct(ExampleClass $var);
+}
+
+class Test extends TestInterface {
+ public function __construct() {}
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of Test::__construct() must be compatible with that of TestInterface::__construct() in %s on line %d


Property changes on: php/php-src/trunk/Zend/tests/bug51421.phpt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Revision
Added: svn:eol-style
+ native

Modified: php/php-src/trunk/Zend/zend_compile.c
===================================================================
--- php/php-src/trunk/Zend/zend_compile.c 2010-06-26 21:29:56 UTC (rev 300769)
+++ php/php-src/trunk/Zend/zend_compile.c 2010-06-26 22:05:13 UTC (rev 300770)
@@ -2909,13 +2909,20 @@
{
zend_uint i;

- /* If it's a user function then arg_info == NULL means we don't have any parameters but we still need to do the arg number checks. We are only willing to ignore this for internal functions because extensions don't always define arg_info. */
+ /* If it's a user function then arg_info == NULL means we don't have any parameters but
+ * we still need to do the arg number checks. We are only willing to ignore this for internal
+ * functions because extensions don't always define arg_info.
+ */
if (!proto || (!proto->common.arg_info && proto->common.type != ZEND_USER_FUNCTION)) {
return 1;
}

- /* Checks for constructors only if they are declared in an interface */
- if ((fe->common.fn_flags & ZEND_ACC_CTOR) && !(proto->common.scope->ce_flags & ZEND_ACC_INTERFACE)) {
+ /* Checks for constructors only if they are declared in an interface,
+ * or explicitly marked as abstract
+ */
+ if ((fe->common.fn_flags & ZEND_ACC_CTOR)
+ && ((proto->common.scope->ce_flags & ZEND_ACC_INTERFACE) == 0
+ && (proto->common.fn_flags & ZEND_ACC_ABSTRACT) == 0)) {
return 1;
}


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

Search Discussions

  • Felipe Pena at Jun 28, 2010 at 4:39 pm
    2010/6/28 Johannes Schlüter <johannes@schlueters.de>
    Hi,
    On Sat, 2010-06-26 at 22:05 +0000, Felipe Pena wrote:
    felipe Sat, 26 Jun 2010 22:05:13 +0000

    Revision: http://svn.php.net/viewvc?view=revision&revision=300770

    Log:
    - Fixed bug #51421 (Abstract __construct constructor argument list not enforced)
    Bug: http://bugs.php.net/51421 (Closed) Abstract __construct constructor
    argument list not enforced

    Won't this break compatibility?

    I'd say the change is logically correct but not sure we should break BC
    there during RC.
    Reverted. ;)

    --
    Regards,
    Felipe Pena

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-internals @
categoriesphp
postedJun 28, '10 at 8:59a
activeJun 28, '10 at 4:39p
posts2
users2
websitephp.net

2 users in discussion

Johannes Schlüter: 1 post Felipe Pena: 1 post

People

Translate

site design / logo © 2022 Grokbase