Итак, у меня есть следующий интерфейс, определенный для автомобиля:
interface FuelTank
{
public function useFuel();
}
interface WaterTank
{
public function useWater();
}
interface CarInterface extends FuelTank, WaterTank
{
public function drive($miles);
public function setFuelTank(FuelTank $tank);
public function setWaterTank(WaterTank $tank);
}
Я попытался создать класс, который реализует и соответствует CarInterface
но у меня проблемы с впрыском зависимостей FuelTank и Watertank. Это класс, который я придумал:
class Car implements CarInterface
{
protected $fuelTank;
protected $waterTank;
public function drive($miles)
{
return $miles;
}
public function useWater()
{
}
public function useFuel()
{
}
public function setFuelTank(FuelTank $tank)
{
$this->fuelTank = $tank;
}
public function setWaterTank(WaterTank $tank)
{
$this->waterTank = $tank;
}
}
Теперь, когда я запускаю следующее:
$car = new Car;
$car->setFuelTank(new FuelTank);
Я получаю это сообщение:
Неустранимая ошибка: не удается создать экземпляр интерфейса FuelTank
Я также не могу объявить класс FuelTank, так как вместо этого я получаю эту ошибку:
Неустранимая ошибка: невозможно переопределить класс FuelTank
Может кто-нибудь помочь мне понять, как правильно реализовать интерфейс выше и что здесь происходит?
Вы должны переименовать интерфейс FuelTank в FuelTankInterface и объявить класс FuelTank, который реализует FuelTankInterface. Интерфейс не может быть создан.
Других решений пока нет …