将接口注入 php 类


Injecting interfaces into a php class

所以我为汽车定义了以下接口:

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 重命名为 FuelTankInterface,并声明一个实现 FuelTankInterface 的类 FuelTank。无法实例化接口。