【问题标题】:Validator - OOP验证器 - OOP
【发布时间】:2012-05-10 06:42:26
【问题描述】:

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

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

可能出了什么问题?

【问题讨论】:

  • OOP_Validate_Int 是否实现了OOP_Validate_Interface

标签: php oop


【解决方案1】:

正如错误消息所解释的,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 部分。

【讨论】:

    【解决方案2】:

    这里的问题是方法 addValidator 接受类型为 OOP_Validator_Interface 的第一个参数,但您在此处向其传递 OPP_Validate_Int() 的实例:$validate-&gt;addValidator(new OOP_Validate_Int());

    我建议不要显式地重新键入 addValidator() 的第一个参数(如果它不是某些框架的一部分),或者另一方面,类 OOP_Validate_Int 必须实现 OOP_Validator_Interface:class OOP_Validate_Int implements OOP_Validator_Interface { .. }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      相关资源
      最近更新 更多