Können Sie überschreiben von interface-Methoden mit unterschiedlichen, aber "kompatibel", Signaturen?

Betrachten Sie die folgende PHP-Schnittstellen:

interface Item {
    //some methods here
}

interface SuperItem extends Item {
    //some extra methods here, not defined in Item
}

interface Collection {
    public function add(Item $item);
    //more methods here
}

interface SuperCollection extends Collection {
    public function add(SuperItem $item);
    //more methods here that "override" the Collection methods like "add()" does
}

Bin ich mit PHPStorm, und wenn ich dies mache, bekomme ich eine Fehlermeldung in der IDE, die im wesentlichen besagt die definition für add() im SuperCollection ist nicht kompatibel mit der definition der Schnittstelle erstreckt, Collection.

In einer Weise, die ich sehen kann, dass dies ein problem, da die Signatur der Methode nicht übereinstimmen, die es "überschreibt" genau. Ich habe aber das Gefühl, dass diese kompatibel sein würde, als SuperItem erstreckt Item, so würde ich schauen add(SuperItem) das gleiche wie add(Item).

Ich bin neugierig, wenn dies unterstützt wird, die von PHP (version 5.4 oder höher), und vielleicht ist das IDE hat einen bug, der nicht richtig fangen.

  • In 5.3, bekomme ich "Fatal error: Declaration of SuperCollection::add() muss kompatibel mit der Sammlung::add()". So wie es aussieht PhpStorm ist richtig. Was glaubst du, warum 5.4 könnte sich anders Verhalten?
Schreibe einen Kommentar