繁体   English   中英

是否可以在PHP函数/方法中使用接口参数

[英]Is it possible to use interface parameters in PHP functions / methods

我想知道是否可以在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中完成同样的事情吗?

不,您不能在接口中定义一个类型,并且在实现者中不能定义另一个类型(即使它是子类),实现者必须完全遵循接口。

但即使你定义了

function create(IVehicle $vehicle);

你仍然可以通过CarTruck

不,它不会工作因为类中的声明必须与接口声明完全兼容,所以你必须使用IVehicle作为参数类型。

是的,您可以在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接口的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM