验证者 - OOP

时间:2012-04-30 14:59:31

标签: php oop

我的代码有问题,不知道该怎么做。 我用过这个

$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();

}

可能出现什么问题?

2 个答案:

答案 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 { .. }