1

我想知道是否可以在 PHP 函数/方法中使用接口参数。

我习惯在 .Net 中编码,使用 .Net 这是可能的,例如具有以下接口:

interface IVehicleDataProvider
{
    public void Create(IVehicle Vehicle);
}

然后我可以在这样的类中实现它:

class CarDataProvider : IVehicleDataProvider
{
    public void Create(Car Car)
    {
        //do something
    }
}

或者

class TruckDataProvider : IVehicleDataProvider
{
    public void Create(Truck Truck)
    {
        //do something
    }
}

只要 Car 或 Truck 实现 IVehicle 接口。

可以在 PHP 中完成同样的事情吗?

4

3 回答 3

3

不,您不能在接口中定义一种类型,而在实现者中定义不同的类型(即使它是子类),实现者必须完全遵循接口。

但即使你定义

function create(IVehicle $vehicle);

你仍然可以传入Cars 和Trucks。

于 2012-08-28T20:53:44.783 回答
0

不,它不起作用,因为类中的声明必须与接口声明完全兼容,因此您必须使用 IVehicle 作为参数类型。

于 2012-08-28T20:53:15.727 回答
0

是的,您可以在 PHP 5 中使用接口,尽管它们还相对不成熟。对于上面的示例,您将使用如下内容:

interface IVehicleDataProvider
{
    public function create(IVehicle $vehicle);
}

class CarDataProvider implements IVehicleDataProvider
{
    public function create(IVehicle $car) {
        //do something
    }
}

PHP 不支持返回类型声明,因此您不能声明函数 void(尽管您应该在函数文档中记下返回类型)。

您也不能扩展接口,因此如果您声明接口中的create函数IVehicleDataProvider接受 的实例IVehicle,则CarDataProvider::create, 函数必须接受 IVehicle 接口的实例。

于 2012-08-28T20:57:44.567 回答