我想知道是否可以在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中完成同样的事情吗?
答案 0 :(得分:3)
不,你不能在接口中定义一个类型,并且在实现者中不能定义一个类型(即使它是子类),实现者必须完全遵循接口。
但即使你定义了
function create(IVehicle $vehicle);
您仍然可以传递Car
和Truck
s。
答案 1 :(得分:0)
不会它不起作用,因为类中的声明必须与接口声明完全兼容,因此您必须使用Vehicle作为参数类型。
答案 2 :(得分: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接口的实例。