1

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

$validate = new OOP_Validate;

$validate->addValidator(new OOP_Validate_Int());

if($validate->isValid('test')) echo 'TRUE';

并告诉我错误:

可捕获的致命错误:传递给 OOP_Validate::addValidator() 的参数 1 必须实现接口 OOP_Validate_Interface,给定 OOP_Validate_Int 的实例,在第 21 行的 C:\xampp\htdocs\GameV\index.php 中调用并在 C:\xampp\htdocs 中定义\GameV\library\OOP\Validate.php 在第 37 行

添加验证器:

公共函数 addValidator(OOP_Validate_Interface $validator, $breakChain = false){
    $this->_validators[] = 数组(
        '名称' => $验证器,
        '中断' => $breakChain,
    );
    返回$这个;   
}

界面:

接口 OOP_Validate_Interface {

    公共函数 isValid($value);
    公共函数 getMessage();

}

有什么问题?

4

2 回答 2

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 手册中的对象接口部分。

于 2012-04-30T15:20:09.723 回答
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 { .. }

于 2012-04-30T15:23:55.673 回答