2012-04-30 7 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クラスを実装する必要があります。class OOP_Validate_Int implements OOP_Validator_Interface { .. }

関連する問題