Edit report at https://bugs.php.net/bug.php?id=62464&edit=1

 ID:                 62464
 Comment by:         ni...@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

Reply via email to