PHP > LIBRARY > Exception/try/throw/catch
 
PHP
Library
Tip&Tech
Q&A
 
PHP Function
phpschool
그누보드
LIBRARY
  HOME > PHP > LIBRARY
 
Exception/try/throw/catch
작성일 : 19-01-08
조회 : 21  

Exception이란?

에러와는 다르게 코드가 실행은 하지만 내가 원하는데로 실행되지 않을 가능성이 높은 코드들을 다루는 방법

예를 들어, database에 data 넣을때 data 값이 잘못되서 넣어지지 않는다거나 파일이 read only라 write를 할 수 없다거나 할때에 에러를 trigger해서 작동을 멈추게 하는 것

Exception 사용하기(try/throw/catch)

try와 catch를 설정하고, try안에 있는 if에서 오류가 난다면 try이용해서 catch로 넘어가고(Exception을 함께), 아니면 if 아래의 내용을 실행한다.

참고! Exception 자체가 php에 미리 구현된 클래스 이다.

<?php $file = "C:/folder/testFile.txt"; try{ if(!file_exists($file)){ throw new Exception("File doesn't exists"); //Exception 자체를 불러와도 되지만 다른 class 불러와도 됨 } echo "If file exists this message will be printed."; } catch(Exception $e){ Exception을 $e로 변환 echo "Message: ".$e->getMessage(); } ?>

Class 이용해서 Exception message 띄우기

class ExceptionHandler extends Exception{ // Exception 호출 public function fileErrorMessage(){ $errorMsg = 'File error. '.$this->getMessage(). //에러 메세지 '</br>Error on line '.$this->getLine().//어디서 에러 나타났는지(Exception 자체 함수) ' in '.$this->getFile(); //어떤 파일에서 에러가 났는지(Exception 자체 함수) return $errorMsg; } } $file = "C:/folder/testFile.txt"; try{ if(!file_exists($file)){ throw new ExceptionHandler("File doesn't exists"); //Exception 대신 class를 할당 } echo "If file exists this message will be printed."; } catch(ExceptionHandler $e){ // class를 $e로 변환 echo $e->fileErrorMessage(); } // File error. File doesn't exists // Error on line 49 in C:\Bitnami\wampstack-7.1.22-0\apache2\htdocs\test.php

Throw의 순서에 맞게 catch가 와야 함

<?php class FileException extends Exception{ // Exception 호출 } class DatabaseException extends Exception{ // Exception 호출 } $file = "C:/folder/testFile.txt"; try{ if(!file_exists($file)){ throw new FileException("File doesn't exists"); //Exception 대신 class를 할당 } else{ throw new DatabaseException("Database has problem."); } } catch(FileException $e){ // class를 $e로 변환 echo $e->getMessage(); } catch(DatabaseException $e){ echo $e->getMessage(); }

stack trace for exception(getTrace)

stack은 LIFO의 형식인데, getTrace 함수를 이용하면 콜백에 의해 stack으로 싸인 것들의 정보를 가져올 수 있다.

<?php function z(){ throw new Exception("This is test for getTrace"); } function y(){ return z(); } function x(){ return y(); } try{ x(); } catch(Exception $e){ print_r($e->getTrace()); } ?>

 
 

Total 77
번호 제   목 조회
공지 php 라이브러리 167
77 매직해시(MAGIC HASHES) 취약점 22
76 Trait 21
75    Trait 23
74 Overloading 19
73    Overloading 19
72 Type hinting/Type 설정하기/Throw error 20
71    Type hinting/Type 설정하기/Throw error 19
70    Type hinting/Type 설정하기/Throw error 19
69 object clone 21
68    object clone 21
67 serialize / unserialize 21
66 spl_autoload_register(오토로드) 21
65 window에서 composer깔기 20
64 Exception/try/throw/catch 22
63 Error의 종류 19
62    Error의 종류 18
61    Error의 종류 17
60 eval 19
59 Magic_methods 19
58    Magic_methods 46
 1  2  3  4  
 
개인홈페이지 덤벙닷컴은 프로그래머와 디자이너위한 IT커뮤니티 공간입니다.
Copyright ⓒ www.dumbung.com. All rights reserved.