Converting errors to exceptions – PHP Standard and Best Practice Part 19

이전에는 오류와 예외의 차이점에 대해 설명했습니다 PHP는 아주 멋진 것을 할 수 있고 에러를 예외로 변환 할 수 있습니다

이점은 때때로 오류가 불가피한 경우입니다 예를 들어 읽을 수없는 파일을 읽으려고하면 오류가 발생할 수 있습니다 읽으려고하기 전에 파일이 있는지 확인하면 오류를 피할 수 있습니다 그러나 파일이 있는지 확인하고 실제로 파일을 읽으려고하는 사이의 밀리 초 삭제되었을 수 있습니다 이것은 경주 조건이라고 부르며 재미를 보냅니다

때로는 무언가를 시도하고 잘못하고 복구해야합니다 오류를 예외로 변환하면 살펴보고 약간의 코드로 어떻게하는지 살펴 보겠습니다 여기에 우리는 줄에 작은 코드 스 니펫을 가지고 있습니다 4 다른 많은 동영상에서 본 것처럼 디스플레이 오류를 사용자가 직접 처리해야 할 수도 있지만 작업 공간에서 수행해야합니다 7 호선은이 예제에서 nope txt라는 파일을 열려고합니다

존재하지 않는 코드는 파일을 다루려고합니다 handle 변수가 false로 설정되었는지 확인하여 10 행에 존재하지 않을 수 있습니다 그러나 그 시점에서 PHP는 이미 오류를 발생 시켰을 것입니다 미리보기를 위해 안구 아이콘을 클릭하여이 코드를 사용해 보겠습니다 그래서 우리는 F open core 함수에서 스트림을 열지 못했다는 경고를받습니다

그런 파일이나 디렉토리는 없습니다 이제 이것은 성가신 일입니다 비록 오류 메시지가 표시됩니다 우리는 우리 자신의 오류 메시지를 표시하려고 노력하고 있습니다 이것이 바로 여기에있는 것입니다

일반적으로 조금 더 예쁘게 보입니다 이것은 단지 예일뿐입니다 오류를 예외로 변환하려면 어떻게해야합니까? PHP에는 익명 함수를 콜백으로 받아들이는 set error handler라는 함수가 있습니다 PHP가 정상적으로 수행하는 것 대신에 PHP 오류가 발생할 때마다이 콜백을 실행합니다 이 콜백이 예외를 throw하는 아주 간단한 오류 처리기로 어떻게 작동하는지 살펴 보겠습니다

여기서 우리의 작업 공간으로 돌아 가면 그리고 약간의 공간을 만들고 설정된 오류 핸들러를 제자리에 던집니다 그래서 우리는 익명의 함수를 가지며이 네 가지 인자를 받아들입니다 오류가 있습니다 여기에 화살표 문자열이 던져지고있는 화살표의 유형과 관련된 숫자는 없습니다 오류가 무엇인지 설명 할 수있는 사람이 읽을 수있는 메시지가 여기에 있습니다

여기에 오류 파일이 있습니다 결국 우리는 에러 라인을 가지게됩니다이 모든 인수는 우리가 잘 알고 있어야하므로 새로운 오류 예외가 발생합니다 이 에러 예외는 PHP의 핵심 예외 타입이며, 이런 종류의 동작을 위해 고안되었습니다 그런 다음이 특정 순서로 모든 인수를 전달하기 만하면됩니다

이걸 저장하고 우리가 그것을 실행할 때 어떻게되는지 보겠습니다 모르겠다 페이지 소스와 마찬가지로 읽기가 어렵습니다 그래서 지금 우리는 치명적인 오류가 있습니다 경고보다 조금 나빠요

무슨 일이 일어나는지 보죠 메시지와 함께 오류 메시지의 예기치 않은 예외가 있습니다 그리고 이것은 우리가 전에했던 것과 같은 메시지입니다 이것은 우리가 가진 경고였습니다 그러나 이제는 오류 예외로 변환되었으며이를 catch하지 않습니다

우리의 코드로 돌아가서 그것을 잡을 수있는 방법을 찾아 볼 수 있습니다 이제 예외를 처리 할 때 try 블록에서 논쟁의 여지가있는 것을 넣을 필요가 있습니다 그런 다음 결과를 catch 블록에 넣어야합니다 인생을 더 편하게 만드는 방법에 대해이 의견을 듣자 그래서 우리는 오류 예외를 잡아 내고 싶다

우리가 이것을 사용하든 사용하지 않든 그것을 Iver 악에 할당하려고합니다 그렇지 않으면 변수에 할당해야합니다 이제는 예외를 던질 수있는 파일을 읽으려고하고 있습니다 바로 여기, 이걸 시험해보고 내가 가지고 있는지 알아 보자 이제는 아무런 경고없이 치명적인 오류가 없습니다

F 열기가 문제를 야기 할 때 화면에서 이상한 점은 예외를 던질 것입니다 우리는 무언가가 잘못되어 오류를 제대로 처리 할 수 ​​있음을 알고 있습니다 우리는 개발 과정에서 오류를 숨기기 위해 몸을 굽히지 않고도이 모든 것을 할 수 있습니다 엄청난 고통이며 실제로 디버깅 할 때 문제가 발생할 수 있습니다 구성 요소를 작성하는 상황에서 예외에 오류를 제공하는 것이 항상 의미가있을 수는 없습니다

다른 사람의 응용 프로그램에 설치 될 수있는 사용자는 귀하가 변환되는 것에 의존하지 못할 수도 있습니다 그러나 자신의 응용 프로그램에서 완전히 제어 할 수 있으므로 절대적으로이 작업을 수행 할 수 있습니다 예외는 개발 및 관리에서 까다로운 요소를 찾아내는 데 도움이 될 수 있습니다 PHP가 오히려 처리를 중지하는 것보다 오히려 그 오류의 일부를 해결할 수 있도록 도와주세요 예외로 인해 PHP가 더 눈에 띄게 더 편리하게 불평하게됩니다