코어 포인트
PHP 예외는 예상치 못한 사건을 나타 내기 위해 던져 질 수있는 특별한 클래스입니다. 회복 할 수없는 오류와 달리, 예외는 호출 코드에 의해 처리되도록 의도되며, 사형이 잡힐 때까지 실행 체인을 따라 위로 거품을 일으킨다.
PHP 오류와 예외의 차이점은 오류가 방해 할 수없고 기본 실행 루프에서 발생한다는 것입니다. 이는 코드 또는 환경의 안정성에 문제가 있음을 나타냅니다. 실행 루프이며 시스템이 불안정하다는 의미는 아닙니다.
모두가 아닌 모든 상황이 예외를 제외 해야하는 것은 아닙니다. 실제로 실행을 계속할 수없는 경우에만 예외가 발생해야합니다. 이는 정상적인 작동 또는 표준이 아닌 행동이 정상적이고 예상되는 상황에서 벗어난 행동이 의미합니다. -
일반
를 토핑하는 것은 "문제"가 있다고 말하는 것과 동일하며 코드는 무슨 일이 일어나고 있는지 전혀 모른다. 대신, 현재 상황에 대한 통화 코드에 알리기 위해 항상 사용자 정의 예외를 던져야하므로 무슨 일이 일어나고 있는지에 대한 세밀한 제어를 제공해야합니다. -
글로벌 캡처 블록은 최고 수준의 캡처 블록이며, 해당 레벨로의 버블 링을 캡처해야한다는 모든 예외입니다. 생산 코드에서 유일한 일반 예외 처리기 여야합니다. 다른 취급자는 구체적이어야하며 처리하는 방법을 알고있는 예외로 제한되어야합니다.
-
PHP 5는 예상치 못한 사건을 나타 내기 위해 던져지고 잡을 수있는 특별 클래스 인 예외 처리 메커니즘을 소개합니다. 오류와 달리, 예외는 호출 코드에 의해 처리되도록 의도되며, 잡힐 때까지 실행 체인을 따라 위로 거품을 일으킨다. 예외가 발생하면 현재 범위의 코드가 실행 중지 중지됩니다 (따라서 문이 실행 된 후 라인이 없음). 제어는 첫 번째 일치 예외 핸들러 (블록 캡처, 구성된 예외 처리기 또는 구성된 예외 처리기 또는 언어가 제공하는 예외 처리기). 코드 실행은 예외가 잡히는 경우에만 계속됩니다. 이 기사는 엔트리 레벨에서 예외를 설명하기위한 것이 아니라 예외를 더 잘 사용하는 방법에 대한 조언을 제공하기위한 것입니다. 전에 예외를 사용한 적이 없다면 PHP 매뉴얼에 문의하거나 "PHP Mas
오류는 예외가 아닙니다 -
Exception
예외에 대해 배웠을 수도 있지만 PHP 오류와 (사용자 정의) 예외의 차이에 대해 궁금 할 수도 있습니다. 논리는 실제로 매우 간단합니다. 오류는 방해 할 수 없으며 기본 실행 루프에서 발생하며 환경의 안정성을 나타냅니다. 예를 들어, 스칼라 값에 배열로 액세스하고 를 올리려고하면 코드에 문제가 있음을 의미합니다. 지속적인 실행이 안전하다는 보장은 없습니다. 이 조건은 실행 중에 수정할 수 없습니다. 파서가 발견 한 예상치 못한 E_NOTICE
에 의해 가 트리거되면, 이것이 사물의 안정성에 어떤 영향을 미치는지 이해할 것입니다. 반면에 예외는 복구 가능하며, 주 실행 루프 외부에서 발생할 수 있으며 시스템의 안정성을 나타내지 않습니다. "주어진 입력으로 귀하의 요청을 완료 할 수 없으므로 라이브러리가 T_IF
를 던지면 해당 정보를 처리 할 수 있습니다. 따라서 현재 값으로 주어진 명령을 완료 할 수 없습니다. 이것은 환경이 불안정하다는 것을 의미하지는 않습니다. 즉, 코드가 패딩 또는 잘림으로 값의 길이를 조정해야 함을 의미합니다. 코드는이 예외를 포착하고 값을 업데이트하며 다시 시도 할 수 있습니다. E_PARSE
LengthException
모든 예외가 예외는 아닙니다
이것은 대답하기 가장 어려운 질문 중 하나입니다. 예외는 정확히 무엇을 던져야합니까? 물론 예외는 이전 단락에서 세 가지 규칙을 준수해야합니다. 손상된 기억에 직면 할 때 예외를 던지는 것은 매우 나쁜 연습입니다. 환경이 실행을 계속하기가 안전하지 않기 때문에 Code는 PHP가 가능한 빨리 중단 할 수 있도록 오류를 던져야합니다. 그러나 오류가 불필요하더라도 모든 비증적인 상황에는 예외가 필요하지 않습니다. 즉, 모든 실패한 상황이 예외는 아닙니다. "비정상"이라는 단어는 정상적인 작동 또는 표준이 아닌 행동과 정상적이고 예상되는 상황에서 벗어나는 비정상을 나타냅니다. 전 동료는 한 번 저녁 식사에서 회사가 사용하는 XML/RPC 서비스가 모든 공개 운영의 중추 인 설계되었다고 말했습니다. 그런 다음 건축가는 비 후세 상태를 나타내는 예외와 편의에 대해 배웠습니다. 이 기둥은 다른 기능 외에 단일 사인온 기능을 제공합니다. 웹 애플리케이션은 데이터베이스에 직접 액세스하는 대신 XML/RPC 서비스를 쿼리 한 다음 모든 웹 애플리케이션을 제공하는 중앙 집중식 데이터 저장소를 기반으로 응답합니다. 유효한 자격 증명이 제공되면 성공적인 상태가 반환됩니다. 문제가 발생하면 예외가 발생하고 실패의 이유를 나타내는 메시지가 표시됩니다. 캡처하기 쉽고 눈에 띄고 반짝이는 오류 메시지를 사용하여 메시지를 사용자에게 표시 할 수 있습니다. 그러나 사용자가 잘못된 사용자 이름 및/또는 암호를 제공하는 것이 실제로 기대에서 벗어나고 있습니까? 내 프로젝트에서 내가 다루는 사용자는 완벽하지 않으며, 오타 또는 잊어 버릴 것입니다. 잘못된 자격 증명을 얻는 것은 매우 일반적이며 유효한 자격 증명보다 훨씬 일반적입니다. 검증 자격 증명은 시스템에 로그인하는 예상 동작 이므로이 경우 XML/RPC 서비스는 확인이 성공했는지 여부를 나타내는 상태를 반환해야합니다. 자격 증명이 실패하지만 검증 프로세스 자체는 여전히 성공적으로 실행됩니다. 확인 프로세스가 올바르게 실행되지 않으면 다른 문제가 있습니다. 데이터 저장소에 액세스 할 수 없거나 다른 것일 수도 있습니다. 로그인 시스템이 데이터 스토어 없이는 실행할 수 없기 때문에 로그인 시스템이 데이터 스토어에 연결할 수없는 것은 매우 드문 일입니다. 따라서 이것은 예외를 던지기가 필요합니다. 참고 : 일부 사람들은 로그인 시스템이 데이터 저장소에 연결하지 못한다고 주장 할 수 있습니다. 환경이 불안정하므로 오류가 발생해야한다는 신호입니다. 그러나 시스템에 로그인하는 것은 데이터 저장에 오류를 제기 할 책임이 없습니다. 반대로, 데이터 스토리지 커넥터/래퍼가 필요하다고 간주되면 오류가 발생해야합니다. 일반적으로 예외는 개발자가 들어가서보고, 처리 해야하는 상황이라고 생각할 수 있습니다. 예외 시나리오에서 발생하는 코드는 자체적으로이를 수행 할 수 없습니다. 이것은 아마도 개발자가 코드를 살펴 보았을 것입니다. 코드가 처리하는 방식은 그것이 일어날 때 발생하는 것입니다. 네트워크 운영 센터에 모든 예외를 이메일로 보내지 마십시오. 당신이 할 수 있고 처리해야 할 것을 처리하며 실제로 실행을 계속할 수없는 경우에만 예외가 발생합니다.
"문제"
몇 년 전, 유럽을 하이킹하는 동안 나는 그리스의 기차역에서 잊을 수없는 광경을 우연히 발견했습니다. 사물함 구역 중 하나는 폭탄이 폭발하는 것처럼 보였고, 문이 땅에 흩어져 있거나 반은 경첩에 매달려 있거나 부서졌습니다. 나는 나중에 그들이 사물함 영역을 제거하고 있다는 것을 알게되었지만,이 지역이 비활성화되었음을 고객에게 어떻게 전달했는지 주목할 가치가 있습니다. 중앙 부분에 테이프가 많이 있었고 종이 조각이 "문제"라는 단어로 붙여 넣었습니다. 기술적으로 이것은 완전히 정확합니다. 사물함에는 분명히 문제가 있었고 상황은 고객에게 전달하여 처리되었습니다. 당신은 그것이 흥미로울 수도 있지만, 실제로 당신은 이것을 코드에서 자주 볼 수 있습니다. 당신이 를 던지면, 기본적으로 "문제"라고 말하고 코드는 무슨 일이 일어나고 있는지 전혀 모른다. 는 각 예외의 기본 클래스이지만 자신의 유형으로 확장 할 수 있습니다. SPL 라이브러리에서 더 넓은 예외 모음을 찾을 수 있지만 이는 한계와는 거리가 멀다. Zend Framework 또는 Symfony와 같은 주요 PHP 프레임 워크를 살펴보면 거의 모든 상황에 대해 사용자 정의 예외를 사용한다는 것을 알 수 있습니다. 이 모든 파일을 동적으로로드하고 모든 다른 유형을 유지할 수 있도록 모든 파일을 작성하는 것은 약간 번거 롭지 만 프레임 워크 및 해당 프레임 워크의 소비자에 대한 세밀한 제어를 제공합니다. 만약 당신이 를 던지면, 당신은 무언가가 잘못되었는지 확인하고 포기할 수도 있습니다. 즉, 예외는 오류 방식으로, 캡처 블록을 조용한 연산자로 사용하고 누군가가 어떤 식 으로든이 상황을 수정할 수 있기를 희망하는 것을 의미합니다. Exception
글로벌 캡처 Exception
가 아닌 예외를 사용하고 가능한 모든 예외를 포착하는 것이 나쁜 생각이라면 왜 언어가 이것을 허용합니까? 규칙에는 항상 특정 예외, 즉 글로벌 캡처 규칙을 사용하고 포착하는 규칙에 대한 예외가 있습니다. 글로벌 캡처 블록은 최고 레벨 캡처 블록이며 해당 레벨로 거품이되는 모든 예외를 포착해야합니다. PHP 자체에는 ( "치명적인 오류 : upphed Exception에서 ..."메시지를 보았습니까?)가 포함되어 있지만 사용자 정의 핸들러를 사용하여 폴백 역할을 할 수 있습니다. 이 핸들러를 Exception
함수로 설정할 수 있으므로 원하는대로 수행하고 " 클래스의 모든 인스턴스를 캡처합니다. 다른 취급자는 구체적이어야하며 처리하는 방법을 알고있는 예외로 제한되어야합니다. 여기서 조심스럽게 진행하면서 한 번도 핸들이 가능한 예외를 버리는 것 (그리고 코드로 수정하는 것)을 너무 많이 잡아서 조용한 연산자 역할을하는 것보다 훨씬 낫습니다.
요약 간단히 말해서, 코드가 주어진 입력으로 요청 된 명령을 완료 할 수없는 경우에만 예외가 발생합니다. 항상 현재 케이스에있는 호출 코드를 알려주는 사용자 정의 예외를 던지고 다른 코드를 호출하는 경우. 당신이 처리 할 수 있고 처리 해야하는 예외 만 포착합니다. 이렇게하면 컴포넌트가 블랙 박스 (사용자 정의 예외)와 같은 구성 요소가 덜 만들어지고 구성 요소를 통합하는 개발자가 코드를 변경해야 할 가능성이 줄어 듭니다 (예외를 포착하지 마십시오). 우리는 항상 고객/관리자에게 구체적이라고 말하지만 구체적이어야합니다!
(Fotolia의 그림)
PHP 예외 처리에 대한 자주 질문
PHP 예외 처리의 목적은 무엇입니까?
PHP 예외 처리는 개발자가 프로그램 실행 중에 발생할 수있는 오류 및 예외를 과초로 보낼 수있는 강력한 메커니즘입니다. 프로그램의 한 부분에서 다른 부분으로 전송하는 방법을 제공합니다. PHP 예외 처리는 지정된 오류가 발생할 때 코드 실행의 정상 흐름을 변경하는 데 사용됩니다. 따라서 코드는 메인 프로그램 로직에서 오류 처리 코드를 분리하기 때문에 코드를보다 쉽게 읽고 관리 할 수 있습니다.
- PHP의 트리 캐치 블록은 어떻게 작동합니까?
PHP에서 Try-Catch 블록은 예외를 처리하는 데 사용됩니다. Try Block에는 예외를 던질 수있는 코드가 포함되어 있으며 Catch Block에는 시도 블록에서 예외가 발생하면 실행되는 코드가 포함되어 있습니다. 시도 블록에 예외가 발생하면 스크립트가 실행 중지 중지되고 제어가 제어 된 예외 유형과 일치하는 첫 번째 캐치 블록으로 전달됩니다.
PHP 예외 처리에서 최종 블록의 역할은 무엇입니까?
PHP 예외 처리의 최종 블록은 예외가 발생하든 아니든 코드 조각이 항상 실행되도록하는 데 사용됩니다. 이는 파일 폐쇄 또는 운영 실패에 관계없이 수행 해야하는 데이터베이스 연결과 같은 활동을 청소하는 데 유용합니다.
-
PHP에서 사용자 정의 예외를 만드는 방법은 무엇입니까?
PHP에서 내장 예외 클래스를 확장하여 사용자 정의 예외를 만들 수 있습니다. 이를 통해 예외에 맞춤 기능을 추가하거나 응용 프로그램 도메인 별 예외를 만들 수 있습니다. 사용자 정의 예외를 만들려면 예외를 확장하는 새 클래스를 정의한 다음 원하는 사용자 정의 메소드 또는 속성을 추가 할 수 있습니다.
PHP의 예외와 오류의 차이점은 무엇입니까?
PHP에서 오류는 스크립트가 실행되는 것을 방지하는 심각한 문제이며 예외는 일반 실행 프로세스를 변경하는 조건입니다. 오류는 일반적으로 구문 오류 또는 정의되지 않은 함수를 호출하여 발생합니다. 반면에 예외는 종종 프로그램에 치명적이지 않지만 특별한 취급이 필요한 조건을 처리하는 데 사용됩니다. -
PHP의 여러 예외를 처리하는 방법은 무엇입니까?
PHP에서 여러 캐치 블록을 사용하여 여러 예외를 처리 할 수 있습니다. 각 캐치 블록은 특정 유형의 예외를 처리합니다. 예외가 발생하면 캐치 블록은 코드에 나타나는 순서로 체크됩니다. 던진 예외 유형을 처리 할 수있는 첫 번째 캐치 블록이 실행됩니다.
PHP에서 예외를 다시 줄 수 있습니까? -
예, PHP에서 예외를 다시 줄 수 있습니다. 예외를 처리하려는 경우 매우 유용하지만 더 높은 수준의 예외 처리기가 잡기를 원한다면 매우 유용합니다. 예외를 다시 줄이려면 캐치 블록에서 Throw 문을 사용하십시오.
PHP의 예외를 기록하는 방법은 무엇입니까?
PHP에서는 캐치 블록에서 Error_Log 함수를 사용하여 예외를 기록 할 수 있습니다. 이를 통해 메시지 및 스택 추적을 포함한 예외에 대한 정보를 지정된 로그 파일에 로그인 할 수 있습니다.
-
PHP의 pdoexception이란 무엇입니까?
pdoexception은 PDO 작업에서 오류가 발생할 때 발생하는 예외입니다. PDO (PHP Data Object)는 PHP에서 데이터베이스에 액세스하기위한 일관된 인터페이스를 제공하는 데이터베이스 추상화 계층입니다. PDOException은 SQLSTATE 오류 코드 및 데이터베이스 드라이버의 오류 메시지를 포함한 오류에 대한 정보를 제공합니다.
PHP의 예외를 처리하는 방법은 무엇입니까?
-
PHP에서는 사용자 정의 예외 핸들러 함수를 정의한 다음 set_exception_handler 함수를 사용하여 기본 예외 핸들러로 설정하여 잡지 예외를 처리 할 수 있습니다. 이 기능은 트리 캐치 블록에 의해 잡히지 않는 예외가 발생할 때마다 호출됩니다.
위 내용은 PHP 마스터 | 예외적 인 예외의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!