2012-04-30 21 views
1

我有一个代码的问题,不知道该怎么办。 我用这个验证器 - 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(); 

} 

出了什么问题?

+5

'OOP_Validate_Int'实现'OOP_Validate_Interface'? –

回答

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部分。

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