スレッド表示 | フラット表示〕 全トピック 924 件中 226 番目 次≫ ≪前

ユーザー定義関数

created: 2006-07-10 19:05 | modified: 2006-07-11 09:04 | reply: 4

[3154] 私ならですが

user: ach | created: 2006-07-10 22:24
checkInput.fnc.php
define('CHECK_OK',0);
define('CHECK_EMPTY',1);
define('CHECK_OVER',2);

function checkInput($subject, $message)
{
$errorMessage[checkInputLen($subject, 30)][] = '[件名]';
$errorMessage[checkInputLen($message, 100)][] = '[本文]';

$errorAppendMessage = array(
CHECK_EMPTY => 'が入力されていません',
CHECK_OVER => 'を正しく入力してください',
);

unset($errorMessage[CHECK_OK]);
foreach ($errorMessage as $enum => $array)
$errorMessage[$enum] = implode('', $array).@$errorAppendMessage[$enum];

if (count($errorMessage) == 0) return TRUE;
error_m(implode('<br>', $errorMessage));
return FALSE:
}

function checkInputLen($str, $maxLen)
{
$length = strlen($str);
if ($length == 0) return CHECK_EMPTY;
if ($length >= $maxLen) return CHECK_OVER;
return CHECK_OK;
}

かな?
関数化するメリットがあるのは文字列長のチェックだけだと思います.(実際そこしか関数化していません)

じゃあ何でこんなにコードがごろっと変わっているのかというと,volksさんのコードに関数化に向かない部分があるからです.

具体的には$errorFlagと$errorMessageが二つある点です.
function checkInput($str, $max, $type, &$errorMessage, &$errorMessage2, &$errorFlag1, &$errorFlag2)
とかすれば何とかなりますが……ちょっと面倒

それに,メッセージ表示処理をifで分岐していますが,あれもいただけません.
チェック項目が一つ増えたら分岐は2倍になりますから,書き直す手間をかんがえると……

というわけで全部書き直したわけです.(怒らないでくださいね)

今回の関数化の指針は
・変数が変わっているだけで繰り返している部分を関数にする
・チェック関数はエラーコードのみを返す(defineを使うのも含めて常套手段)
・関数にはあまり多くのことを詰め込まない


それでは,簡略化がんばってください
Parent: 3151  reply: 3155 返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 924 件中 226 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑