我正在尝试在我的服务中使用
BaseServiceClass
和 ChildServiceClass
。我想做这个方法: makePost (PostObject $postObject){}
in ChildServiceClass
扩展了 BaseServiceClass
。
在 BaseServiceClass 中,我已将
makePost
定义为:makePost (PostObject $postObject){}
至于
PostObject
,它扩展了BaseObject
,但是当我尝试将这些对象设置为父对象和子对象时,我收到此错误,我明白了ChildServiceClass:makePost() is not compatible with method BaseServiceClass:makePost()
示例:
在基础服务中:
public function addFilter(BaseSearchObject $searchObject, $query){
return $query;
}
在产品服务中:
public function addFilter(ProductSearchObject $searchObject, $query)
{
//code that overrites BaseController
}
关于搜索对象:
class ProductSearchObject extends BaseSearchObject
有没有办法可以将不同的类传递给这些方法?
错误很简单,您试图用
PostObject
覆盖最初接受 BaseObject
的方法。
PostObject
延伸BaseObject
的事实与这里无关,因为PostObject
从来都不是BaseObject
,它总是不仅仅是BaseObject
,但BaseObject
有时可以是PostObject
.
解决方案是不使用任何这些对象,而是让该对象实现一个公共接口,如
IsServicable
,并让所有方法接受实现此接口的对象而不是具体类型。
如果使用 php8,您还可以使用联合类型。在这种情况下,您使两个服务都接受两种类型的输入。
public function makePost(BaseObject|PostObject $object){}