0

この単純なクラスでは、たとえば var_dump ルールが必要です。しかし、これはうまくいきません。誰にもアイデアがありますか?

わかりました、私はいくつかの変更を加えました。true または false の投稿後に返されます。できます。このコードは OOP の良い方法ですか?

class Forms_FormsValidation {

private $_required;
private $_minLength;
private $_maxLength;
private $_alphaNumeric;
private $_errors;

public function __construct($validate, $posts) {
    array_pop($posts);
    foreach ($validate as $arraykey => $value) {            
        foreach ($value as $key => $values) {
            if (method_exists($this, "set$key")) {                    
                $set = 'set'.ucfirst($key);
                $get = 'get'.ucfirst($key);
                $this->$set($posts["$arraykey"], $values);
                if( $this->$get() != '') {
                    $this->_errors[$arraykey] .= $this->$get();
                }                    
            }
        }
    }          
}

public function setValidation(){
    if ( empty($this->_errors) ){return TRUE;}return FALSE;
}
public function getRequired() {
    return $this->_required;
}

public function setRequired($value, $ruleValue) {
    if (empty($value) && $ruleValue == TRUE) {
        $this->_required = 'newwwwwwwwww this field is required';
    }
}

public function getMinLength() {
    return $this->_minLength;
}

public function setMinLength($value, $ruleValue) {
    if (strlen($value) < $ruleValue) {
        $this->_minLength = 'must be longer than' . $ruleValue . '';
    }
}

public function getMaxLength() {
    return $this->_maxLength;
}

public function setMaxLength($value, $ruleValue) {
    if (strlen($value) > $ruleValue) {
        $this->_maxLength = 'must be shorter than' . $ruleValue . '';
    }
}

public function getAlphaNumeric() {
    return $this->_alphaNumeric;
}

public function setAlphaNumeric($value, $ruleValue) {
    if (!preg_match('/^([a-z0-9])+$/i', $value)) {
        $this->_alphaNumeric = 'can only contain letters and numbers';
    }
}

}

$validateUser       = array( 'user' => array ( 'required' => TRUE, 'minLength' => 2,'maxLength' => 15, 'alphaNumeric' => TRUE ));
$validatePassword   = array( 'password' => array ( 'required' => TRUE, 'minLength' => 2,'maxLength' => 15, 'alphaNumeric' => TRUE ));
$_POST = array_map('strip_tags', $_POST);
$formsValidation = new Forms_FormsValidation($validateUser, $_POST); 
$formsValidation = new Forms_FormsValidation($validatePassword, $_POST); 
if ( $formsValidation->setValidation() === TRUE ) {echo 'TRUE';}
4

4 に答える 4

1

var_dumpこの関数で使用する

public function getValidationRules()
{
    var_dump($this->_validationRules);
} 
于 2013-05-09T05:17:01.090 に答える
0

var_dump($this->_validationRules);クラスのコンストラクトで呼び出そうとしているため、機能していません。このコンストラクトは、クラスのインスタンスまたはオブジェクトを作成するときにのみ呼び出されます。その時間には、$this->_validationRules必要な値が含まれていませんvar_dump

setValidationRules()

関数。

つまり、これを行うとき

$formsValidation = new Forms_FormsValidation(); 

コンストラクター関数が呼び出され、その時点では値がありません。

ダンプ結果を取得するには、代わりにこれを試してください。

public function setValidationRules( $validationRules )
{
    $this->_validationRules = $validationRules;
    var_dump($this->_validationRules);
}  
于 2013-05-09T05:14:54.957 に答える
0

その時点で nullvar_dump($this->_validationRules);として何も表示されないコンストラクター内で呼び出します。関数呼び出しの$this->_validationRules後に呼び出すことができます。動作しますsetValidationRules

于 2013-05-09T05:16:43.940 に答える
0

Var_dump() はコンストラクターで正常に動作しています。問題は、オブジェクトを作成する前にメンバーを初期化する必要があることです。

例:

コンストラクターで:

public function __construct() {
     $this->_validationRules = array( 'required' => TRUE, 'minLength' => 2,'maxLength' => 15, 'alphaNumeric' => TRUE );
     var_dump($this->_validationRules);
}

または、次のようにクラスメンバー定義で変数を定義できます

class Forms_FormsValidation {        
    private $_validationRules = array( 'required' => TRUE, 'minLength' => 2,'maxLength' => 15, 'alphaNumeric' => TRUE );
于 2013-05-09T05:30:42.600 に答える