Php &引用;类包含1个抽象方法,因此必须声明为抽象或实现其余方法(parent::hasErrors)";

Php &引用;类包含1个抽象方法,因此必须声明为抽象或实现其余方法(parent::hasErrors)";,php,interface,abstract-class,Php,Interface,Abstract Class,这是我的代码: interface ValidatorInterface { public function hasErrors (); public function validate (stdClass $metadata); public function getFeedback (); } abstract class ValidatorAbstract implements ValidatorInterface { protected $feedback; pu

这是我的代码:

interface ValidatorInterface
{
  public function hasErrors ();
  public function validate (stdClass $metadata);
  public function getFeedback ();
}

abstract class ValidatorAbstract implements ValidatorInterface
{
  protected $feedback;

  public function __construct ()
  {
    $this->feedback = new FormFeedback();
  }


  public function getFeedback ()
  {
    return $this->feedback;
  }


  public function hasErrors ()
  {
    return $this->getFeedback()->hasErrors();
  }
}

class RegistrationValidator extends ValidatorAbstract
{
  public function validate (stdClass $metadata)
  {
    $this->getFeedback()->addError('Testing');

    return !!$this->hasErrors();
  }
}
这就是错误:

致命错误:类注册验证器 包含1个抽象方法,因此必须声明为抽象或 实现其余的方法 (ValidatorInterface::hasErrors)

抽象类
ValidatorAbstract
满足了
ValidatorInterface
hasrerrors()
getFeedback()
方法的要求

RegistrationValidator
扩展了
ValidatorAbstract
并满足声明
validate()
方法的最后剩余要求


那么为什么我会得到一个错误,说
RegistrationValidator
包含一个抽象方法,而它不包含,并且它必须实现
hasErrors()
,当该方法已经由其父类实现时?

在抽象类中,您需要至少有一个抽象方法

abstract protected function someFunction();

一个好的做法是不要将任何代码放入抽象类。

确保发布的代码与正在运行的代码相同。在您发布的示例中,每个抽象方法都在层次结构中的某个位置实现,代码运行良好


还要确保您正在编辑的文件是正在运行的副本(可以缓存)。

请提供一个完整的可运行示例。我无法重现错误。抽象类不需要有抽象方法。顺便说一句,
ValidatorAbstract
没有实现
ValidatorInterface::validate
,所以它需要是抽象的。我完全相信这是必要的-谢谢你的评论。不。你可以只使用一个抽象类来确保所有对象都是相同的基类型:)实际代码实际上是几个文件
ValidatorAbstract.php
显然是被缓存的。愚蠢的问题。它一定没有成功上载,因为此服务器上没有操作码缓存。最简单的问题通常最难找到:(