我创建了一个名为iMapper
的界面。我希望我的所有mappers文件都能实现该接口。
但每个映射器都会指定参数类型。
示例:
interface iMapper
{
public function insert($obj);
public function update($obj);
public function delete($obj);
}
class CarMapper implements iMapper
{
public function insert(Car $obj){}
public function update(Car $obj){}
public function delete(Car $obj){}
}
该代码会产生以下错误:
CarMapper :: insert()的声明必须与iMapper :: insert()
的声明兼容
他们是否可以使界面与CarMapper
兼容? (我不想更改映射器。)
由于
答案 0 :(得分:2)
“但每个映射器都会指定参数类型。” - 我不得不说无法做到。
必须实现接口。这是什么意思?所有实现类都必须能够使用带有未指定参数的方法 - 接口内部方法所需的参数。
在方法体内调用instanceof
是一种出路,但它确实不是一个好方法。
了解策略模式,我打赌它可以解决您的问题 - http://sourcemaking.com/design_patterns/strategy/php
答案 1 :(得分:2)
更好:
interface iObject {}
class Car implements iObject
interface iMapper
{
public function insert(iObject $obj);
public function update(iObject $obj);
public function delete(iObject $obj);
}
class CarMapper implements iMapper
{
public function insert(Car $obj){}
public function update(Car $obj){}
public function delete(Car $obj){}
}
答案 2 :(得分:0)
interface iMapper
{
public function insert(Car $obj);
public function update(Car $obj);
public function delete(Car $obj);
}
class CarMapper implements iMapper
{
public function insert(Car $obj){}
public function update(Car $obj){}
public function delete(Car $obj){}
}
接口和类方法必须匹配!必须使用相同类型的提示。
答案 3 :(得分:0)