Можно ли запретить реализовывать интерфейс напрямую? Вместо этого класса необходимо реализовать потомок этого интерфейса (например, оспоримый).
оспоримый это внутренний интерфейс. Там нет потомков этого. Просто когда вы находитесь в PHP userland (то есть там, где вы пишете PHP-код), вы не сможете реализовать оспоримый непосредственно, но только один из тех двух, которые являются оспоримый, тоже:
Но причина не в том, что есть какое-то отношение потомков, которое вы можете контролировать в пользовательском пространстве PHP, а только в том, что пересечение является внутренним интерфейсом, недоступным для вас в пользовательском пространстве
Помимо интерфейсов, вы можете создать абстрактный класс, который не может быть создан. Позже вы спросите этот абстрактный тип:
abstract class Mineable
{
// ...
}
class MineAggregate extends Mineable
{
// ...
}
class Mine extends Mineable
{
// ...
}
Это не интерфейсы, по уважительной причине. оспоримый пример, возможно, ввел вас в заблуждение, обычно не следует делать то, что там было сделано. Смотрите также:
Поэтому, естественно, вы можете создать это с помощью интерфейсов, однако любой Интерфейс может быть реализован:
interface Mineable {} // this interface is empty just for the taste of it
interface MineAggregate extends Mineable
{
// ...
}
interface Mine extends Mineable
{
// ...
}
Я не знаю, если это то, что вы ищете, ваш вопрос мне не совсем понятен, я должен признать.
может быть возможно определить ваш интерфейс с protected
ключевое слово, поэтому только классы в одном пакете могут реализовать интерфейс.