私はtry-catchを初めて使用し、DRYの原則に対応するために、最近多くのコードをリファクタリングしています。ただし、まだうまくいかないシナリオがいくつかあります。たとえば、私が取り組んでいる多言語アプリケーションでは、URLのクエリ文字列に2文字の国コードを渡してユーザーがインターフェイス言語を設定できるようにしたい、またはアプリケーションがデフォルトの言語を使用できるようにしたい場合ユーザーがリクエストしていません:
// Which language shall we use?
$language = new language();
if(isset($_GET['language_code'])){
try {
$language->set_by_language_code($_GET['language_code']);
} catch(e_language_not_found $e){
try {
$language->set_default_language();
// TODO - use 'e_language_not_found' to display an error in the default language
} catch(Exception $e){
exit('No default language found');
}
}
} else {
try {
$language->set_default_language();
} catch(Exception $e){
exit('No default language found');
}
}
set_default_language()
問題は、ユーザーが言語をまったく要求していないときにブロックを繰り返したことです。アプリケーションでそのメソッドを1回だけ呼び出すように、コードをリファクタリングするにはどうすればよいですか?ありがとう!