• 締切済み

エラーチェックのクラス

エラーチェックの自作クラスを作っているのですが効率のいいロジックを教えてください。 現状は以下のような状態です。 class FORM { function hoge($str) { // 任意の条件によるエラーチェックを行いエラーであればtrueを返す } // 以下思いつくようなエラーチェックをひたすら書いてます。 } if (POSTされたら) { $form = new FORM(); if ($form->hoge($_POST['name'])) { // エラーフラグ $err['name'] = true; } // 以下同様にチェックが必要な分だけ記述 } } 動作は正常にしておりチェックの度に正規表現等を書かなくても済むのでべた書きよりは だいぶスッキリできているのですがチェックがあるものをそれぞれ書かなければ 行数自体にはさほど差がありません。 いい方法と言えど人それぞれかと思うのですが効率よくクラスを使用するには どのようなロジックが考えられるでしょうか? エラーメッセージの出力等可能な事はできるだけクラス内で処理したいと考えております。 一連の流れやアドバイス等でも構いませんので有識者の方宜しくお願い致します。

みんなの回答

  • mpx
  • ベストアンサー率71% (149/209)
回答No.3

開示されている情報だけで何をどこまでチェックしたいか分かりませんが、 空かどうかのチェックも他のチェックも「//お好みのエラーチェック」のところに全て入れておくだけです。 例 case "url": if (is_null(trim($str))) return false; return (記載内容チェック)? true:false; break; //年齢が必須項目(20歳以上),emptyとis_numeric case "age": if (is_null(trim($str))) return false;//emptyならfalse if (!is_numeric($str)) retuen false;//数値以外ならfalse return ($str >=20 )?true:false; // 20未満ならfalse break; 以上のように必要なチェックを羅列していくだけです。 $strが配列でも配列に応じたチェックを列挙するだけです dcx147さんの元の質問での例示が、booleanでの戻り値を期待した記載になっていたので回答も合わせていますが、エラー内容に応じたエラーコードを戻り値にするようにしておくともっと使いやすいクラスになるでしょうね。

dcx147
質問者

お礼

お返事ありがとうございます。なるほど!1つの定義で1つのチェックではなく必要に応じて それぞれのチェックをパターン化してしまえばいいという事ですね。勘違いしておりました^^; >エラー内容に応じたエラーコードを戻り値にするようにしておくともっと使いやすいクラスになるでしょうね。 とりあえずとっついてみた形での記述となっているので確かに今後改良の余地は十分にありですね。。。 もし宜しければどのような記述例にすれば効率があがるものか概要だけでも教えて頂けますと 非常に今後の参考になるのですが宜しければお願い致します!

  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

>> 上記のように複数回のエラーチェックや1つの内容で複数の項目がある場合 呼び出し側を if ($form->hoge($key, $_POST[$val])) { にして class FORM { function hoge($key,$str) { switch ($key) { case "name": //お好みのエラーチェック break; case "jusho": //お好みのエラーチェック break; case "url": //お好みのエラーチェック break; case "mail": //お好みのエラーチェック break; //あとは好きなだけ追加 } } }

dcx147
質問者

補足

お返事ありがとうございます! 補足をお願いしたいのですが見た感じですとswitch文なので例えばurlが必須の場合は if ($form->hoge('empty', $_POST[$val])) { // 空エラー } if ($form->hoge('url', $_POST[$val])) { // 形式エラー } のように2回なしにチェックの分だけ書かなければいけないように見えるのですが そういう事でしょうか?

  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

チェックするキーを配列で準備しておき、ループ処理というのは如何でしょう if (POSTされたら) { $keys=array("name","jusho","url","mail");//チェックする項目を羅列 $form = new FORM(); foreach($keys as $key=>$val){ if ($form->hoge($_POST[$val])) { // エラーフラグ $err[$val] = true; } } }

dcx147
質問者

お礼

お返事ありがとうございます。 確かにこうすれば簡略化も可能ですね!しかし疑問があるのですが 例えば年齢が必須項目(20歳以上)の場合普通であればemptyとis_numericと 比較演算子の合計3回はチェックを掛ける必要があり電話番号が必須項目で -(ハイフン)を挟み3つの項目になっている場合などがあると思うのですがその場合は クラスでどのような処理を書けばいいものでしょうか? 現状のように1つの項目で1つのエラーチェックを行う分には問題ないのですが 上記のように複数回のエラーチェックや1つの内容で複数の項目がある場合 または配列の場合等入り組んでいる場合どのように処理すればいいものかが 具体的にわからない状態です。

関連するQ&A

専門家に質問してみよう