重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

こんにちは。
以下の様なコードを書いています。
本来処理するロジックの前に色々なチェックをして全部OKなら目的の処理をする、
と言うコードのつもりなのですが、例外を複数発生させスタックするようなこの書き方は、
良い書き方ですか?「良い」と言うのは、バグの発生を抑えつつ、拡張性、保守性に優れ、
他人にも読みやすいという意味です。

class Foo
{
private $exception;

public function __construct()
{
try{
$this->__init_check();

if($this->exception){
throw $this->exception;
}
}catch(Exception $e){
die(implode("<br />\n", $this->__exceptionToArray($e)));
}

目的の処理・・・
}

private function __stackException($message, Exception $previous = null) {
return new Exception($message, 0, $previous);
}

private function __exceptionToArray(Exception $e) {
do {
$errors[] = $e->getMessage();
} while ($e = $e->getPrevious());
return array_reverse($errors);
}

private function __init_check()
{

if(is_writable('/foo') === false){
$this->exception = $this->__stackException( 'xxxに書き込み権限がない', $this->exception);
}
if(あのチェック){
$this->exception = $this->__stackException('あのチェックおかしい', $this->exception);
}
if(このチェック){
$this->exception = $this->__stackException('このチェックおかしい', $this->exception);
}
などなど。。。

}
}

A 回答 (2件)

正直にいうと 1点大きな違和感がある.



ほんとうにこの形なら, __init_check で例外を throw した方がシンプルじゃないかねぇ.
    • good
    • 0

開発中のデバッグモードとしては有効だと思います


実際の運用にはいったらそれだけ例外処理が発生する可能性があるのか?
という課題はあるでしょうね

冒頭でエラー対処をする場合、プログラムが後ろに流れずにexitする想定ですよね?
どちらかといえば、例外処理はプログラム内に組み込んでエラー時は
該当部をスルーする(もしくはエラーを表示して次に流す)仕様が妥当じゃないですかねぇ?
    • good
    • 0

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