PHP接口:指定参数列表,但不指定参数类型


PHP interface: specify a parameter list, but not the parameter type

我创建了一个名为iMapper的接口。我希望所有的映射器文件都能实现这个接口

但是每个映射器都会指定参数类型。

的例子:

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兼容的方法吗?(我不想改变映射器)

谢谢

"但是每个映射器都会指定参数类型。"-我不得不说那是不可能的。

接口必须实现。这是什么意思?所有实现类都必须能够使用带有未指定参数的方法,该参数是接口内部方法所要求的。

在方法体内部调用instanceof是一种出路,但这真的不是一个好方法。

阅读策略模式,我打赌它能解决你的问题- http://sourcemaking.com/design_patterns/strategy/php

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){}
}
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){}
}

接口和类方法必须匹配!必须使用相同类型的提示

你的类必须实现这个接口。但是没有,所以PHP会报错。

可以在方法中使用类型检查。

看一下instanceof。