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
显然是被缓存的。愚蠢的问题。它一定没有成功上载,因为此服务器上没有操作码缓存。最简单的问题通常最难找到:(