) { ( ); } public function int : void = if === throw new if === throw new cancelReservation find // DBからfetchする Reservation null CouldNotFoundReservation InvalidReservationStatus "予約が見つかりませんでした。" "すでにキャンセルされています。" ($reservation['status'] 'canceled') { ( ); }
:: ($reservationId); ($reservation ) { ( ); } public function int : void if < throw new = if === throw new if === throw new cancelReservation find 1 LogicException Reservation null RuntimeException RuntimeException "IDは1以上である必要があります" "予約が見つかりませんでした。" "すでにキャンセルされています。" // DBからfetchする ($reservation->status 'canceled') { ( ); } 問題がある場合は早く中断する Î DBに問い合わせる前にIDのチェックしておµ Î 取得したオブジェクトを操作する前にチェックする
throw new ( $reservationId) { ($reservationId ) { ( ); } ... cancelReservation 1 LogicException "IDは1以上である必要があります" class public function int if <= throw new -> = { ( $value) { ($value ) { ( ); } value $value; } ReservationId __construct 0 InvalidArgumentException $this "IDは1以上である必要があります。" public function ( $reservationId) { } cancelReservation ReservationId // IDのチェックが不要になった W IDがロジック違反かどうかはID自身でチェックすI W IDのコンストラクタが呼ばれた段階で処理を中断できる