Bug #63816 [Fbk]: implementation child interface and after parent cause fatal error.
| From: | dmitry@php.net | Date: | Thu, 10 Jan 2013 06:20:47 +0000 |
| Subject: | Bug #63816 [Fbk]: implementation child interface and after parent cause fatal error. | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-175925@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=63816&edit=1
ID: 63816
Updated by: dmitry@php.net
Reported by: kotlyar dot maksim at gmail dot com
Summary: implementation child interface and after parent
cause fatal error.
Status: Feedback
Type: Bug
Package: Scripting Engine problem
Operating System: linux
PHP Version: 5.4.7
Assigned To: dmitry
Block user comment: N
Private report: N
New Comment:
It may be a warning, but actually it's not a big deal to fix a script once you see this FATAL
error.
Finally, if we change it to warning, some script will work on 5.5 but fail on 5.3. Do we really need
to introduce another incompatibility because of this small issue?
Previous Comments:
------------------------------------------------------------------------
[2013-01-10 04:40:07] laruence@php.net
Hey, I think it not deserved a FATAL. maybe a warning ?
------------------------------------------------------------------------
[2013-01-09 10:49:51] kotlyar dot maksim at gmail dot com
@dmitry I see you reason. I am completely agree with you that be silent and allow
two same interface is not a good solution.
But from the other side. I believed that I could implement interface in any order
I want. Ordering of interfaces(maybe should be?) is not documented anywhere.
Also the described situation could be resolved without a fatal error so it at
least not developer friendly.
------------------------------------------------------------------------
[2013-01-09 09:41:18] dmitry@php.net
I'm not sure if this is a bug. At least the error message is absolutely correct. When class
"C" implements interface "FirstChildInterface" it also implements its parent
interface - "RootInterface", and when it tries to implement "RootInterface" it
sees that it was already implemented before.
The Laruence's patch removes the error message completely, so the following buggy code becomes
legal.
<?php
interface foo {}
class bar implements foo, foo {}
?>
I would prefer not to do it.
------------------------------------------------------------------------
[2013-01-05 05:37:24] laruence@php.net
not sure why such error is threw in zend_compile.c line 2926
we can simply be silence(or warning), then ignore it.
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index e395795..9063023 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -2920,11 +2920,7 @@ ZEND_API void
zend_do_implement_interface(zend_class_entry *ce, zend_class_entry
memmove(ce->interfaces + i, ce->interfaces + i + 1,
sizeof(zend_class_entry*) * (--ce->num_interfaces - i));
i--;
} else if (ce->interfaces[i] == iface) {
- if (i < parent_iface_num) {
- ignore = 1;
- } else {
- zend_error(E_COMPILE_ERROR, "Class %s cannot
implement previously implemented interface %s", ce->name, iface->name);
- }
+ ignore = 1;
}
}
if (ignore) {
------------------------------------------------------------------------
[2012-12-20 15:31:55] kotlyar dot maksim at gmail dot com
Change php version
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=63816
--
Edit this bug report at https://bugs.php.net/bug.php?id=63816&edit=1