エラーチェックの自作クラスを作っているのですが効率のいいロジックを教えてください。

現状は以下のような状態です。

class FORM {
function hoge($str) {
// 任意の条件によるエラーチェックを行いエラーであればtrueを返す
}
// 以下思いつくようなエラーチェックをひたすら書いてます。
}

if (POSTされたら) {
$form = new FORM();
if ($form->hoge($_POST['name'])) {
// エラーフラグ
$err['name'] = true;
}
// 以下同様にチェックが必要な分だけ記述
}
}

動作は正常にしておりチェックの度に正規表現等を書かなくても済むのでべた書きよりは
だいぶスッキリできているのですがチェックがあるものをそれぞれ書かなければ
行数自体にはさほど差がありません。

いい方法と言えど人それぞれかと思うのですが効率よくクラスを使用するには
どのようなロジックが考えられるでしょうか?

エラーメッセージの出力等可能な事はできるだけクラス内で処理したいと考えております。

一連の流れやアドバイス等でも構いませんので有識者の方宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (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での戻り値を期待した記載になっていたので回答も合わせていますが、エラー内容に応じたエラーコードを戻り値にするようにしておくともっと使いやすいクラスになるでしょうね。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。なるほど!1つの定義で1つのチェックではなく必要に応じて
それぞれのチェックをパターン化してしまえばいいという事ですね。勘違いしておりました^^;

>エラー内容に応じたエラーコードを戻り値にするようにしておくともっと使いやすいクラスになるでしょうね。

とりあえずとっついてみた形での記述となっているので確かに今後改良の余地は十分にありですね。。。

もし宜しければどのような記述例にすれば効率があがるものか概要だけでも教えて頂けますと
非常に今後の参考になるのですが宜しければお願い致します!

お礼日時:2009/06/01 11:06

>> 上記のように複数回のエラーチェックや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;
//あとは好きなだけ追加
}
}
}

この回答への補足

お返事ありがとうございます!
補足をお願いしたいのですが見た感じですとswitch文なので例えばurlが必須の場合は

if ($form->hoge('empty', $_POST[$val])) {
// 空エラー
}

if ($form->hoge('url', $_POST[$val])) {
// 形式エラー
}

のように2回なしにチェックの分だけ書かなければいけないように見えるのですが
そういう事でしょうか?

補足日時:2009/05/30 14:12
    • good
    • 0

チェックするキーを配列で準備しておき、ループ処理というのは如何でしょう



if (POSTされたら) {
$keys=array("name","jusho","url","mail");//チェックする項目を羅列
$form = new FORM();
foreach($keys as $key=>$val){
if ($form->hoge($_POST[$val])) {
// エラーフラグ
$err[$val] = true;
}
}
}
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
確かにこうすれば簡略化も可能ですね!しかし疑問があるのですが
例えば年齢が必須項目(20歳以上)の場合普通であればemptyとis_numericと
比較演算子の合計3回はチェックを掛ける必要があり電話番号が必須項目で
-(ハイフン)を挟み3つの項目になっている場合などがあると思うのですがその場合は
クラスでどのような処理を書けばいいものでしょうか?

現状のように1つの項目で1つのエラーチェックを行う分には問題ないのですが
上記のように複数回のエラーチェックや1つの内容で複数の項目がある場合
または配列の場合等入り組んでいる場合どのように処理すればいいものかが
具体的にわからない状態です。

お礼日時:2009/05/29 10:39

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング