try catch

Jiwon·2022년 7월 1일
0

try catch

예외처리가 발생할 수 있는 소스코드 -> 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 되었을 때 처리하는 부분


참고사이트
https://dev.epiloum.net/1140

profile
과연 나는 ?

0개의 댓글