【发布时间】:2014-11-20 10:54:06
【问题描述】:
所以我为汽车定义了以下接口:
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
谁能帮我理解如何正确实现上面的接口以及这里发生了什么?
【问题讨论】:
-
您不能像类一样实例化接口。这是 $car->setFuelTank(new FuelTank);错了。