Bug #62464 [Com]: implementing two interfaces with same signature no longer gives a fatal error

From: Date: Mon, 02 Jul 2012 17:50:10 +0000
Subject: Bug #62464 [Com]: implementing two interfaces with same signature no longer gives a fatal error
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-171690@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=62464&edit=1 ID: 62464 Comment by: nikic@php.net Reported by: j dot henge-ernst at interexa dot de Summary: implementing two interfaces with same signature no longer gives a fatal error Status: Open Type: Bug Package: Scripting Engine problem Operating System: linux PHP Version: 5.3Git-2012-07-02 (Git) Block user comment: N Private report: N New Comment: I'm not sure I see the problem. If the class satisfies both interfaces, why should there be an error? E.g., consider: interface Iterator { function current(); function key(); function next(); function valid(); } interface RewindableIterator extends Iterator { function rewind(); } interface ReversableIterator extends Iterator { function prev(); } class Foo implements RewindableIterator, ReversableIterator { // ... } Why shouldn't the class be able to implement both, as long as the method declarations don't disagree? Previous Comments: ------------------------------------------------------------------------ [2012-07-02 16:11:52] j dot henge-ernst at interexa dot de Description: ------------ having two different interfaces with same method no longer causes a fatal error like in php 5.3.8. With fix for bug #43200 (my guess) it is now possible to inherit another interface which has the same method signature as a previous interface. implementing an interface with methods which collide with a method name which is already implemented by another interface should cause an error. From my point of OOP it does not make sense as the meaning of the colliding interface method do not express the same, else both interfaces with the same signature part should extend that base interface. It's the opposite of bug #46705 Such a change of the language should not be done in a minor release. Test script: --------------- <?php interface AInterface { public function getLogicalKey(); } interface BInterface { public function getLogicalKey(); } class AClass implements AInterface { public function getLogicalKey() { return 1; } } class BClass extends AClass implements BInterface { } Expected result: ---------------- Fatal error: Can't inherit abstract function BInterface::getLogicalKey() (previously declared abstract in AInterface) in x.php on line 12 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=62464&edit=1

« previous php.bugs (#171690) next »