2

テキスト行を取り込み、約 15 の異なる「基準」(個々の preg_match ステートメント) を使用して、行が配列に保存される資格があるかどうかを確認するクラスがあります。

クリーンで保守可能なコードを使用して、このような状況をどのように処理するのが最善でしょうか?

最初は、すべての基準を備えた非常に長い if ステートメントがありました。たとえば、次のようになります。

if (
    preg_match($criteria1,$line) &&
    preg_match($criteria2, $line) &&
    ...
    ...
    ...
    preg_match($criteriaN,$line)
) {
    //do something, e.g. save the line to an array.
}

それ以来、各 preg_match ステートメントを別のクラス内の別の関数に入れ、各関数を続けて呼び出して、それが真かどうかを確認しています...良いコードを書いている気がしません。この状況をどのように処理するのが最善ですか?

4

3 に答える 3

1

オブジェクト指向を維持したい場合は、次のようなクラスを使用できます...

class Validator{

    /* Any criteria needing to be met must exist in this array */
    public static $criterias = array($criteria1,
                                      $criteria2,
                                      ... ,
                                      $criteriaN);



    public static function validate($line){

        /* Make sure this line meets each criteria */
        foreach(Validator::$criterias as $criteria){

              if(!preg_match($criteria, $line))
                   return false;
        }

        return true;
    }

メソッドとプロパティはどのインスタンスにも固有ではないため、静的にすることは理にかなっています。次に、電話をかけることで、行が基準を満たしているかどうかを簡単に確認できます

Validator::validate($line)
于 2013-08-15T14:56:00.227 に答える