Laravel 中的方法重载,即使我的类正在扩展 [重复]

问题描述 投票:0回答:1

我正在尝试在我的服务中使用

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

有没有办法可以将不同的类传递给这些方法?

php laravel methods
1个回答
3
投票

错误很简单,您试图用

PostObject
覆盖最初接受
BaseObject
的方法。

PostObject
延伸
BaseObject
的事实与这里无关,因为
PostObject
从来都不是
BaseObject
,它总是不仅仅是
BaseObject
,但
BaseObject
有时可以是
PostObject 
.

解决方案是不使用任何这些对象,而是让该对象实现一个公共接口,如

IsServicable
,并让所有方法接受实现此接口的对象而不是具体类型。

如果使用 php8,您还可以使用联合类型。在这种情况下,您使两个服务都接受两种类型的输入。

public function makePost(BaseObject|PostObject $object){}
© www.soinside.com 2019 - 2024. All rights reserved.