php - 使用多个验证器验证值的最佳(有效、合乎逻辑)方法是什么?

标签 php validation

<分区>

这可能是一个相当菜鸟的问题,但我不是专业的 PHP 开发人员,我想知道编写以下代码的最佳(高效、合乎逻辑)方式是什么:

function validate_1 ( $input ) {
  if ( mycondition ) {
    return $input;
  }
}

function validate_2 ( $input ) {
  if ( myOtherCondition ) {
    return $input;
  }
}

function validate ( $input ) {
  if ( validate_1( $input ) ) {
    return validate_1( $input );

  } else if ( validate_2( $input ) ) {
    return validate_2( $input );

  } else {
    return validate_last( $input );
  }
}

validate( 'a value' );

以这种方式,我总是执行函数两次。这样好还是有更好的方法 (php >= 5.2)?

最佳答案

你可以试试这个: http://dsheiko.com/subpage/chain-of-responsibility-pattern

或者在类中这样做:

abstract class Validator {
 public function validate($args);
}
class Vali1 extends Validator {
 public function validate($args){
    #validate
    return $bool;#true or false
 }
}
class Vali2 extends Validator {
 public function validate($args){
    #validate
    return $bool;#true or false
 }
}

$validators = array(new Vali1,new Vali2);
$validated=null;
foreach($validators as $validator){
   $validated = $validator->validate($args);
}

或具有功能:

$validators = array(
   function($args) {  retrun $bool;},
   function($args) {  retrun $bool;},
   function($args) {  retrun $bool;}
);
 $validated=null;
foreach($validators as $validator){
  $validated = $validator($args);
}

但这只是基础。还有更多去罗马的方法。

更新:

$count = count($validators);
$current = 0;
do{
 $result = $validators[$current++]($args);
}while(!$result && $current < = $count);

然后在函数中返回 $input 或在无效时返回 NULL

关于php - 使用多个验证器验证值的最佳(有效、合乎逻辑)方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28387290/

相关文章:

Java 验证仅针对字符串值集添加约束

jquery - 使用 jQuery 验证插件验证单选按钮组

java - 如何编写数字+字符串的验证?

正则表达式验证密码

c# - 将数据从远程网站中的 JavaScript 函数传递到桌面应用程序上的 C# 应用程序

php - 带有 Laravel Unix 套接字的 MAMP

php - set_error_handler 函数不调用自动加载

jQuery 验证 : Custom validator with AJAX

javascript - 在 NetBeans 中运行 AJAX PHP 示例

php - 执行 gethostbyname 最多 1 秒