2022 년도 4월에 작성된 글 입니다.
PHP 7.0 의 변경 사항
- 성능 향상 - PHP 5.6 보다 두배 이상 빠른 속도
- 메모리 사용률이 현저히 감소
- 추상 구문 트리(Abstract Syntax Tree)
- 일관된 64비트 지원(Consistent 64-bit support)
- 향상된 예외 상속(Improved Exception hierarchy)
- 많은 치명적 에러들이 예외로 전환 됨
- 보안 난수 발생기(Secure random number generator)
- 오래 됐거나 지원하지 않는 SAPI와 확장 지원 중단
- Null 병법 연산자(The null coalescing operator (??))
- 리턴 값, 스칼라 타입 정의
- 익명 클래스(Anonymous Classes)
- Zero cost asserts
Error VS Execpion 구분
PHP는 Error 와 Execpion 를 구분한다.
Error
절차 지향적인 적인 방법이다.
Error는 실행하는 과정에서 브라우저에 출력되는 메세지를 통해 확인이 가능하다.
$file_var = fopen("open_file.txt", "r");
if (!file_exists("open_file.txt")) {
die("파일이 존재하지 않느다.");
}
else {
fopen("open_file.txt", "r");
}
?>
Exception
객체 지향적인 접근 방법이다.
예외를 지정했을 경우 스크립트를 통해 발생하고, throw new Exception() 를 사용한 Exception 핸들링은 하고 try catch 를 사용한다.
try {
$row->insert();
$inserted = true;
} catch (Exception $e) {
echo "DB에 데이터를 추가하다 오류가 발생했습니다. - ".$e->getMessage();
$inserted = false;
}
echo "Some more stuff";
PHP 7부터 Error와 Exception클래스 모두 Throwable 인터페이스를 구현하고 잡을 수 있다고 한다.
PHP 예외
PHP 5.1 버전에서 try catch 구문을 사용할 수 있게 되었고, PHP 5.5 버전부터는 finally 구문도 사용할 수 있게 되었다.
위의 두가지 방법 모두 5.5 이상의 버전에서 사용 가능하다는 것이다.
Exception 클래스가 포함하는 프로퍼티와 메소드
Exception 클래스가 포함하는 프로퍼티
$message | 예외 메시지 |
$code | 예외 코드 |
$file | 예외가 발생한 파일명 |
$line | 예외가 발생한 라인 |
Exception 클래스가 포함하는 메소드
__construct() | 생성자 |
getMessage() | 예외 메시지를 반환함. |
getCode() | 예외 코드를 반환함. |
getFile() | 예외가 발생한 파일의 경로를 반환함. |
getLine() | 예외가 발생한 라인 번호를 반환함. |
getTrace() | 발생한 예외에 대한 정보를 포함한 배열(Exception stack trace)을 반환함. |
getTraceAsString() | getTrace()의 결과를 문자열로 반환함. |
__toString() | 발생한 예외에 대한 정보를 문자열로 반환함. |
try {
// 발생
throw new Exception("예외 메시지");
} catch(Exception $err) {
// 예외 처리
echo "예외 메세지 : ".$err->getMessage()."<br>";
echo "예외가 발생한 파일 경로 : ".$err->getFile()."<br>";
echo "예외가 발생한 라인 번호 : ".$err->getLine();
}
향상된 예외 상속(Improved Exception hierarchy)
예시코드
// customException을 만들어 Exception을 상속 받음
class customException extends Exception {
public function errorMessage() {
// 에러 메세지
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "someone@example...com";
try {
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
// 이메일이 올바르지 않는 경우 예외를 발생
throw new customException($email);
}
} catch (customException $e) {
// 커스텀 메세지 출력
echo $e->errorMessage();
}
PHP5.6 의 결과
PHP7.0 의 결과
실험 결과
결론 실험 실패이다.
customExecption 을 만들어 Execpion 을 상속 받는 것은 5.6 버전에서도 지원하기 때문이다.
PHP 5.6 에서 PHP7.0 으로 버전이 올라가며 추가된 향상된 예외 상속 이란 무엇인지 많은 자료를 확인해보고 다시 한번 테스트를 진행 해야한다.
테스트를 통해서
인터넷의 공개된 다양한 코드와 PHP 예외에 대한 여러 글들을 읽다 보니, 라라벨 공식문서에 작성된 Sentry 의 CustomExecpion 이 아닌 뭔가 다양한 CustomExecpion 을 만들수 있을 것 같다.
CustomExecpion 은 PHP 7.0에서 변경된 사항을 모두 정리한 후 해야겠다.
결론
실험이 실패이다. 그 이유는.. Throwable를 안했기 때문
하지만 결론적으로 PHP 7.0 으로 버전이 올라가면서 Throwable 가 추가되었다.
그냥 Throwable 가 추가 됬다.
'Programming > $_머니 (PHP)' 카테고리의 다른 글
[PHP 기초] - include 와 require 그리고 _once (0) | 2024.02.09 |
---|---|
[실험 PHP 7.0 6탄] - 많은 치명적 에러들이 예외로 전환 됨 (0) | 2024.02.09 |
[실험 PHP 7.0 4탄] - 일관된 64비트 지원(Consistent 64-bit support) (0) | 2024.02.09 |
[실험 PHP 7.0 3탄] - 추상 구문 트리(Abstract Syntax Tree) (0) | 2024.02.09 |
[실험 PHP 7.0 2탄] - 메모리 사용률이 현저히 감소 (0) | 2024.02.09 |