Php 扩展一个抽象类,该抽象类扩展另一个抽象类,并且需要重写父抽象类实现的接口

Php 扩展一个抽象类,该抽象类扩展另一个抽象类,并且需要重写父抽象类实现的接口,php,inheritance,interface,Php,Inheritance,Interface,我有一个名为Post的实体类。Post的父级基于名为AbstractPost的抽象类。AbstractPost有一个变量“author”,其setter的签名在一个称为PostInterface的接口中定义 我的处境是,我需要覆盖作者的设置,但不想修改父项(当然) 这些是父类: class Post extends AbstractPost abstract class AbstractPost implements PostInterface interface PostInterface

我有一个名为Post的实体类。Post的父级基于名为AbstractPost的抽象类。AbstractPost有一个变量“author”,其setter的签名在一个称为PostInterface的接口中定义

我的处境是,我需要覆盖作者的设置,但不想修改父项(当然)

这些是父类:

class Post extends AbstractPost
abstract class AbstractPost implements PostInterface
interface PostInterface
我有以下课程:

class MyPost extends MyAbstractPost
abstract class MyAbstractPost extends AbstractPost implements MyPostInterface
interface MyPostInterface extends PostInterface
但是,我得到了一个错误:

致命错误:MyAbstractPost::setAuthor()的声明必须是 与PostInterface::setAuthor()兼容

我已经读到,子类继承父类的“实现”部分(这里正确的行话是什么?),所以我想知道如何重写它。还是我没有以正确的方式扩展/实施

谢谢

答案是否定的


重载方法签名违背了拥有接口的目的。

setAuthor方法到底需要更改什么?您得到该错误是因为您在接口中定义了方法签名,而您的另一个类没有正确实现该方法。你能在错误消息中提到的接口和抽象类中发布代码吗?你不能。如果您有--这是一种设计气味--您将需要引入一个新的代理方法。@delete me please Ok,我该怎么做?@delete me please:关于设计:父类的创建者将作者定义为字符串。但是我希望它是一个用户id。我不知道有任何其他方法可以实现这一点(除了将author字段保留为空,这很奇怪),代理方法与任何其他方法一样,在应用必要的更改后,您只需调用“实际方法”将您的方法变白,您没有为我或其他人提供足够的设计信息,无法为您提供准确的解决方案。