次の認証クラスの例で例外をスローする場合は、処理する状況ごとに異なる例外をスローすることをお勧めします。例:
addUser(...) {
// normal database code here...
switch(TRUE) {
case ($username_exists):
throw new UserExists('Cannot create new account. Account username ' . $un . ' already exists.');
case ($email_exists):
throw new EmailExists('Cannot create new account. Account email ' . $email . ' already exists.');
}
}
//to be called externally by...
try {
$auth->adduser(...);
} catch (UserExists) {
$output = 'That username is already taken.';
} catch (EmailExists) {
$output = 'That email is already being used.';
} catch (AuthException $e) {
$output = $e->getMessage();
}
echo $output;
}
または、一意の例外コードを使用して一般的な「タイプ」の例外をスローすることをお勧めしますか?例えば...
addUser(...) {
// normal database code here...
switch(TRUE) {
case ($username_exists):
throw new AuthException('Cannot create new account. Account username ' . $un . ' already exists.', 10);
case ($email_exists):
throw new AuthException('Cannot create new account. Account email ' . $email . ' already exists.', 20);
}
}
//to be called externally by...
try {
$auth->adduser(...);
} catch (AuthException $e) {
switch($e->getCode()) {
case 10:
$output = 'That username is already taken.';
break;
case 20:
$output = 'That email is already being used.';
break;
default:
$output = $e->getMessage();
}
echo $output;
}
私は例外に不慣れであり、両方の解決策が等しく実行可能であるように思われるので、私は尋ねます。おそらく他の解決策が完全にありますか?
興味深い補足:いくつかの回答を受け取るまで、「あなたの好みは何ですか」という質問をしていることに気づきませんでした。私は単一の推奨される方法を期待していました。