예외처리가 발생할 수 있는 소스코드 -> try {} 로 묶는다
try {} 안에서 예외가 발생하는 부분에 Exception 이라고 하는 객체 생성,
이 객체를 throw문을 사용하여 던진다.
throw문을 만났을 때 실행할 코드를 catch {} 에 작성한다.
catch {} 에서는 앞서 throw문에서 던진 Exception 객체를 받아서 사용 가능
--> 실행순서
1. try {} 를 만나면, PHP는 일단 try {} 에 있는 코드들을 한 라인씩 실행
2. 이 과중 중에 throw문을 만나게 되면,
try {} 에 있는 throw문 이하의 코드는 모두 건너뛰고, 바로 catch {} 로 진입
3. 반대로 try {} 을 끝까지 실행했음에도 throw 문을 만나지 않았다면,
catch 블록을 실행하지 않고 뛰어넘는다.
$total = intval($_POST['total']);
$people = intval($_POST['people']);
class calcRemainException extends Exception
{
protected $res; // 100원 단위로 나눈 금액
protected $remain; // 나누고 남은 금액
public function __construct($total, $people, $code = 0)
{
$this -> res = floor($total / $people / 100 ) * 100;
$this -> remain = $total - $this -> res * $people;
$msg = $this -> res . '원씩 나눈 후, ';
$msg .= $this -> remain . '원이 남습니다.';
parent::__construct($msg, $code);
}
}
try {
if(total < 1000)
{
throw new Exception('금액을 1000원 이상으로 입력해주세요.', 1);
}
if($people <= 0)
{
throw new Exception('사람 수를 1명 이상으로 입력해주세요.', 2);
}
if($total % $people != 0)
{
throw new calcRemainException($total, $people, 3);
}
$s = floor($total / $people) . '원입니다!';
}
catch(Exception $e)
{
$s = $e->getMessage() . ' (오류코드:' . $e -> getCode() . ')';
}
catch(calRemainException $e)
{
$s = $e->getMessage();
}
echo $s;
첫 번째 catch 문은 Exception 객체가 throw 되었을 때 처리하는 부분,
두 번째 catch 문은 새로 정의한 calcRemainException 객체가 throw 되었을 때 처리하는 부분