2012-04-30 18 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 { .. }