我想知道是否可以在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);
您仍然可以传入Car
s和Truck
s。
是的,您可以在PHP5中使用接口,尽管它们还相对不成熟。对于上面的例子,您可以使用如下内容:
interface IVehicleDataProvider
{
public function create(IVehicle $vehicle);
}
class CarDataProvider implements IVehicleDataProvider
{
public function create(IVehicle $car) {
//do something
}
}
PHP不支持返回类型声明,因此不能声明函数void(尽管您应该在函数文档中注意返回类型)。
您也不能扩展接口,因此,如果您声明IVehicleDataProvider
接口中的create
函数接受IVehicle
的实例,那么CarDataProvider::create
函数必须接受IVehicle接口的实例。