Приведенное ниже наследование интерфейса недопустимо в PHP, но я думаю, что это было бы весьма полезно в реальной жизни. Есть ли настоящая антипаттерн или задокументированная проблема с приведенным ниже дизайном, от которой PHP защищает меня?
<?php
/**
* Marker interface
*/
interface IConfig {}
/**
* An api sdk tool
*/
interface IApi
{
public __construct(IConfig $cfg);
}
/**
* Api configuration specific to http
*/
interface IHttpConfig extends IConfig
{
public getSomeNiceHttpSpecificFeature();
}
/**
* Illegal, but would be really nice to have.
* Is this not allowed by design?
*/
interface IHttpApi extends IApi
{
/**
* This constructor must have -exactly- the same
* signature as IApi, even though its first argument
* is a subtype of the parent interface's required
* constructor parameter.
*/
public __construct(IHttpConfig $cfg);
}
источник
Driver
может управлять любымVehicle
, и поскольку обаCar
иMotorcycle
расширяютсяVehicle
, всеDriver
s должны быть в состоянии справиться с обоими.