Exceptions – PHP Standard and Best Practices Part 18

마지막 비디오에서 우리는 PHP가 예외 라이트 인 방법을 설명하고 문제를보고하기 위해 선택적 오류 메시지 또는 오류 값을 사용했습니다 코어 자체는 예외를 많이 사용하지 않을 수도 있지만 코드에서 사용하려는 경우 사용할 수 있습니다 그리고 구성 요소 나 프레임 워크를 사용하여 확실히 실행하게 될 것입니다

잘못된 값을주는 문제는 실수를 찾고 문서를 확인하여 어떤 방법이 제공되는지 확인해야한다는 것입니다 오류 메시지는 매우 명확하게 만들기 위해 예외가 발생하는 것이 훨씬 낫습니다 함수에서 다양한 유형의 예외를 던질 수있는 방법을 살펴보고 PHP가 각각 다른 방식으로 반응하도록하십시오 작업 공간을 보면 여기에 몇 개의 파일이 있습니다 작곡가로부터 이미 알아야 할 것은, 우리는 인덱스 PHP를 엽니 다 여기에 꽤 많은 코드가 있지만 당황하지 마십시오

이 모든 것이 무엇을 의미하는지 설명하겠습니다 여기 3 번에 표시 오류가 있습니다이 오류는 이미 알고 있었기 때문에 오류를 인식하는 데 도움이됩니다 예기치 않게 우리는 벤더 자동로드 PHP를 포함합니다

그리고 이것이 우리의 새로운 코드가 시작되는 곳입니다 기본적으로 HTTP 다운로드 스크립트입니다 우리가 제공하는 URL의 본문을 다운로드 할 것인가? 여기에서 8 ~ 10 줄은 예외의 여러 유형을 정의합니다 핵심 예외 클래스를 사용할 수 있습니다 그러나 예외 클래스를 확장하여 자신의 예외를 정의하면 나중에 다른 유형의 예외를 쉽게 구별 할 수 있습니다

나는 여러 클래스와 함수를 같은 몸체에 정의함으로써 몇 가지 규칙을 깨뜨리고있다 보통 이들은 서로 다른 파일로 분리되어야한다 그러나 내가 규칙을 깨뜨린 것을 보여주기 위해 여기에 13 번 줄을 함께 던지십시오 우리는 함수를 정의하고있다 가져 오기라는 HTTP 본문이며,이 인수가 a 인 하나의 인수를 취합니다

다운로드하려는 URL의 문자열 값 15 행은 버즈 네임 스페이스 안에있는 browser라는 클래스를 인스턴스화합니다 이 패키지는 우리가 컬 확장 (curl extension)보다 훨씬 정교한 방식으로 HTTP 상호 작용 또한 컬 확장이 서버에 설치되어 있지 않아도이 작업에 의존 할 수 있습니다 16 행은 새로 인스턴스화 된 브라우저 객체를 사용하고 get 메소드를 실행하고 URL을 인수로 전달하면 응답이 객체이며이 응답 변수에 저장됩니다 18 응답 내용을 다운로드 중입니다 이것은 HTTP 본문 인 19 행의 실제 응답 HTML입니다

우리는 응답 객체를보고 상태 코드 메소드를 얻고 상태 코드 변수에 저장하면 21 행의 두 항목을 사용합니다 우리는 상태 그룹을 만들고 있습니다 변수와 상태 코드에 대한 문자열 작업을 수행하여 첫 번째 자리가 무엇인지 알아냅니다 이것은 우리가 코드를 얻으면 그것을 의미합니까? 400 그때 우리는 당신이 익숙하지 않은 경우에 대해서만 원합니다 HTTP 상태 코드 다른 의미의 코드가 많이 있다는 사실을 알고 첫 번째 숫자를 기준으로 이러한 코드를 그룹화 할 수 있습니다 예를 들어 코드를 얻은 경우 404는 누락 된 페이지를 의미하며 4로 시작하기 때문에 HTTP 클라이언트 오류임을 알 수 있습니다

HTTP 클라이언트는 웹 브라우저 또는이 경우에는 PHP 코드 일 수 있습니다 고객이 누락 된 페이지를 요청하기 때문에 우리는 그들이 엉망이되어서이 상태 코드 변수가 2 3 4 또는 5를 포함 할 수 있도록 말해야합니다 예외의 타입에 따라 우리는 외부 코드를 던진다 우리는 다르게 상호 작용하기를 원할 것입니다 스위치 요소에서이 상태 그룹 변수를 사용하면 다른 예외를 던질 수 있습니다 이것들은 또한 HTTP 규격을 기반으로하고 있습니다

HTTP 스펙을 완전히 이해하지 못한다면 그래서 우리는 상태 표를 보는 switch 문을 가지고 있습니다 그런 다음 상태 그룹에 포함될 수있는 각기 다른 잠재적 가치에 대한 사례가 있습니다 25 번째 줄에서는 값이 HTTP 사양에 따라 모든 것이 작동 함을 의미하는 두 가지 값으로 시작한다는 것을 알 수 있습니다 이는 우리가 계속해서 내용 변수를 반환 할 수 있고 27 행에서 예외가 필요 없다는 것을 의미합니다 우리는 코드가 리디렉션이 발생했음을 의미하는 세 가지로 시작한다는 것을 알고 있습니다

함수가 새로운 것을 던질 수 있다는 것을 알기 위해 함수 호출을 허용하려면 사람이 읽을 수있는 메시지와 함께 HTTP 리디렉션 예외와 여기에 29 번째 줄이 있으면 특정 상태 코드가 포함됩니다 코드가 4로 시작 했으므로 클라이언트가 잘못된 요청을했음을 의미합니다 31 행의 새로운 HTTP 클라이언트 예외를 여기에 던져서 알릴 수 있습니다 우리는 HTTP 사양에 따라 5 개의 코드로 시작합니다 설명은 서버 오류를 의미하므로 다른 사람이 읽을 수있는 문자열을 사용하여 HTTP 서버 예외를 발생 시키자

마지막으로 32 행에는 기본 경우가 있습니다 우리가 예상치 못한 일을 당하면 상태 그룹의 값으로 우리는 이상한 일이 무엇인지 알 수없는 일반적인 예외를 던질 수 있습니다 이제 나는 그것이 꽤 많이 들어갈 것이지만, 주된, 테이크 아웃 다른 유형의 예외가 다른 유형의 예외를 가지므로 예외는 예외에 따라 다를 수 있습니다 여기 39 행을 보면 다른 예외에 따라 다르게 반응하는 코드를 살펴 보겠습니다 가져 오기를 호출하는 것을 볼 수 있습니다

HTTP 본문에 직접 결과를 표시합니다 우리는 또한 문자열을 전달합니다이 문자열은 위에 정의 된 함수에서 URL 매개 변수로 들어갈 URL을 포함합니다 또한 38 행의 위 줄에 try 블록이 있습니다이 try는 던져지는 예외에 대해주의해야한다는 것을 의미하며 던져진 예외가 일치하면 이 4 개 중 하나는 여기에 있습니다

그 고양이 블록에있는 코드 조각이 실행됩니다 어떤 유형의 예외가 우리 오류의 결과를보고 던져 졌는지 알 수 있습니다 이 문자열이 앞에 붙어 있기 때문에 그러면 메시지를 출력하고 처음 3 개 정도의 경우에는 코드를 넣을 것입니다 printf가 어떻게 작동하는지 잘 모르겠다면 그것은 당신이 그것을 이해할 필요가있는 경우에는 문자열을 형식화하는 꽤 쉬운 방법입니다 그러나 이것들은 기본적으로 그래서 나는 우리가 스크립트를 실행하여 무슨 일이 일어 났는지 미리보기 아이콘에 표시 할 시간이 왔다고 생각합니다

그런 다음 예제 도메인을 봅니다 이것은 정확하게 우리가 여기 exampleorg에게 기대했던 결과입니다 그럼 지금 보는 똑같은 똑똑한 모습이야 이런 쓰레기 유로에 넣어 주면 해보 죠

나는 확실히 웹 사이트에 존재하지 않는다 그런 다음 우리는 새로 고침하고 완벽하게 할 수 있어야합니다 우리는 클라이언트 오류가 있고 코드 404는 앞에서 설명한대로 페이지가 없다는 것을 의미합니까? 우리 코드로 돌아가서 다른 방법으로 시도해 볼 수 있습니다 스트림을 열지 못했다는 일반적인 오류가 있습니다 이제 이것이 우리의 예외 중 하나는 아니지만,이 예외가 우리의 코드에 의해 잡히고 있습니다

buz 그들은 우리가 잡으려고하지 않은 일종의 예외를 던졌습니다 그러나 우리는 여기에이 포괄적 인 성명서가 있기 때문에 우리는 어쨌든 잡는 중입니다 이것은 우리가 코드의 특정 이벤트를 조사하고 그에 따라 반응하는 것을 보장 할뿐만 아니라 그러나 catch-all 블록을 사용하여 단순히 이러한 오류를 반복하지 않고 예상하지 못한 예외를 잡아냅니다 우리는 그것들을 사용하여 코드에서 유용한 것들을 할 수있다

HTTP 서버 예외가 연결을 다시 시도 할 수 있습니다 Haitch TTP 클라이언트 예외가 사용자에게 오류를 보내면 일반적인 예외로 인해 개발 팀의 누군가에게 전자 메일을 보낼 수 있습니다 여기에 요점을 개선해야 할 필요가있는 코드를 알리려면 구체적인 기대치에 반응해야합니다 특정 문제에 어떻게 대처할 수 있는지 매우 자세하게 설명 할 수 있습니다 거짓 반환 값을 찾고 나서 작동하지 않는 nope를 말하는 것보다 훨씬 더 유용합니다

예외는 머리를 감기는 데는 시간이 걸릴 수 있지만 매우 기본적인 수준입니다 사용자 정의 예외 클래스는 예외 범주처럼 사용되어야하며 특정 오류 메시지 및 코드는 추가 정보를 제공합니다 false가 좋거나 나쁘다면 해결하려고하는 것보다 훨씬 쉽습니다