我的代码有问题,不知道该怎么做。 我用过这个
$validate = new OOP_Validate;
$validate->addValidator(new OOP_Validate_Int());
if($validate->isValid('test')) echo 'TRUE';
并告诉我错误:
Catchable fatal error: Argument 1 passed to OOP_Validate::addValidator() must implement interface OOP_Validate_Interface, instance of OOP_Validate_Int given, called in C:\xampp\htdocs\GameV\index.php on line 21 and defined in C:\xampp\htdocs\GameV\library\OOP\Validate.php on line 37
AddValidator:
public function addValidator(OOP_Validate_Interface $validator, $breakChain = false){ $this->_validators[] = array( 'Name' => $validator, 'Break' => $breakChain, ); return $this; }
接口:
interface OOP_Validate_Interface { public function isValid($value); public function getMessage(); }
可能出现什么问题?
答案 0 :(得分:0)
正如错误消息所解释的那样,addValidator
方法要求传递给它的第一个参数实现名为OOP_Validate_Interface
的接口。
$validate->addValidator(new OOP_Validate_Int() /* <-- this argument must implement OOP_Validate_Interface */);
检查您的代码并将OOP_Validate_Int
的类声明更改为:
class OOP_Validate_Int implements OOP_Validate_Interface
{
/*
Then ensure that all the methods required by OOP_Validate_Interface
are defined in this class.
*/
}
有关详细信息,请查看PHP手册中的Object Interface部分。
答案 1 :(得分:0)
这里的问题是方法addValidator接受类型为OOP_Validator_Interface的第一个参数,但是你在这里传递了一个OPP_Validate_Int()实例:$validate->addValidator(new OOP_Validate_Int());
。
我建议不要显式重新键入addValidator()的第一个参数(如果它不是某个框架的一部分),或者另一方面,类OOP_Validate_Int必须实现OOP_Validator_Interface:class OOP_Validate_Int implements OOP_Validator_Interface { .. }
。