1

フォーム入力を検証するクラスを作成したいと思います(車輪の再発明についてのコメントはありません)。

オブジェクトはデータを保持しないため、検証オブジェクトをインスタンス化するよりも、静的な検証メソッドを持つクラスを使用する方が理にかなっていると思いますか?

たとえば、次のようになります。

<?php

class Validator {

    static function is_numeric($val) {

        if(is_numeric($val))
            return true;

    }

}

私が使用できるようになります:

if(!Validator::is_numeric($_POST['age'])) $error['age'] = "Age must be a number";

一方:

<?php

class Validator {

    public function is_numeric($val) {

        if(is_numeric($val))
            return true;

    }

}

関数を使用するには、クラスのインスタンスをインスタンス化する必要があるということですか?システムメモリの無意味な使用だと思いますか?:

$validator = new Validator();
if(!$validator->is_numeric($_POST['age'])) $error['age'] = "Age must be a number";

私の例の検証方法は、標準のPHP is_numeric関数を使用する以外に何もしないため、悪い例ですが、これは私のポイントを説明するためだけのものです。

静的メソッドクラスはより良いオプションですか?そうでない場合、なぜですか?

4

4 に答える 4

0

バリデータクラスの特定のインスタンスで複数の関数呼び出しを使用すると思います。シングルトン メソッドを使用するか、インスタンスを 1 つだけ作成することをお勧めします (例: $validator = new Validator;)。

メモリに関しては、これが最良の選択です。クラスへの100回の呼び出しを持つ1つのインスタンスではなく、100回の個別の静的呼び出しがある場合は、新しいインスタンスを作成する方がよいでしょう。

于 2012-06-01T09:14:44.293 に答える
0

バリデータクラスを使用することは、私にとってより良い選択のようです。クラス変数が必要ない場合は、インスタンス化せずに使用できます。また、そのクラスの長時間のインスタンスが必要ない場合は、RAM にスペースは必要ありません。

于 2012-06-01T09:15:15.347 に答える
0

コードの保守性と可読性について考えてください。フレームワークやクラスなどを構築するのは常に魅力的ですが、同じ機能を 40 ではなく 100 LOC に埋め込むことが常に良い選択であるとは限りません。決定は、バリデーターが何をするかに依存する必要があります。

内部状態がなく、複雑なパラメーターがない場合は、クラスを作成しないでください。

単純な関数は分析が簡単になるだけでなく、副作用がないこと、使用する関数以外のドキュメントを読む必要がないことをユーザーに知らせます。

複雑にしないでおく。

于 2012-06-01T10:27:47.173 に答える