Рассмотрим следующие интерфейсы PHP:
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
}
Я использую PHPStorm, и когда я это делаю, я получаю ошибку в среде IDE, которая в основном утверждает, что определение для add()
в SuperCollection
несовместимо с определением в интерфейсе, который он расширяет, Collection
.
В одном случае я вижу, что это проблема, поскольку подпись метода не соответствует той, которую она "переопределяет" точно. Тем не менее, я чувствую, что это будет совместимо, поскольку SuperItem
extends Item
, поэтому я бы посмотрел add(SuperItem)
так же, как add(Item)
.
Мне любопытно, поддерживает ли это PHP (версия 5.4 или выше), и, возможно, IDE имеет ошибку, которая не улавливает это.