这可能是一个相当菜鸟的问题,但我不是专业的 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