2011-01-11 5 views
4

현재 여러 목적으로 register_shutdown_function()을 사용하고 있습니다. 하나는 치명적인 오류를 처리하는 데 사용되는 반면 다른 하나는 시간, memoryusage 등의 실행 중에 사용되는 로깅 자원을위한 것입니다.register_shutdown_function() - 모범 사례는 무엇입니까?

현재 두 가지 다른 종료 기능을 등록하지만 한 테스트에서는 첫 번째 테스트 만 실패하고 다른 테스트에서는 실패한 것 같습니다. . 지금 이것은 ofcourse 함수 자체 내에서 어떤 오류에 의해 트리거 될 수 있도록 내가 그것을 다시 작성했지만 가능한 오류가 여러 register_shutdown_function 호출을 사용하여 발생했습니다? 두 가지 다른 기능을 등록하거나 다른 작업을 처리하는 하나의 기능을 호출하는 것이 가장 좋은 방법입니다.

치명적인 오류가 발생하거나 기능 자체 내에서 기능을 유지해야하는 경우 오류 처리 클래스를로드하는 것이 안전할까요?

종료 기능을 사용하는 것보다 치명적인 오류를 처리하는 가장 좋은 방법이 있다면 궁금한 점이 있습니까? 나는 set_error_handler를 사용하여 시도했지만 모든 오류 유형을 포함하지는 않으므로 오류가 발생하지는 않습니다.

이러한 질문이 잘 공식화되고 명확 해지기를 바랍니다. 내 목표는 가능한 한 코드를 견고하게 유지하는 것이고 내가 가진 질문에 대해서는 괜찮은 대답을 찾지 못했습니다.

* 편집 : 내 첫 번째 질문에 대한 답변을 찾았으므로 여러 함수를 등록해도 문제가 없어야하므로 오류가 함수 자체 내에 있어야합니다. 치명적인 오류를 처리 할 수있는 더 나은 방법이 있는지에 대한 질문을 던지십시오.

답변

2

IIRC, 등록 된 여러 종료 기능이있는 경우 등록 된 순서대로 실행됩니다. 그리고 어떤 경우라도 exit 문을 사용하지 않아야합니다. 그렇지 않으면 후속 종료 기능이 실행되지 않습니다. 즉, 하나의 종료 기능이 아니라 여러 기능이있는 경우 매우주의해야합니다.

그러나 다른 인수에 다른 함수를 전달하는 경우 모든 적절한 변수가 설정되기 전에 함수가 호출 된 경우 (오류로 인해 트리거 될 수 있음) 해당 함수에 대한 기본값이 있는지 확인해야합니다.

개인적으로, 나는 자신과 비슷한 목적으로 여러 기능을 등록합니다. 하지만 그들 사이의 논리와 등록 순서에 대해 매우 신중합니다.

그것은 내가 클래스를 사용하지 않는 것입니다 :) 자체가 예외를

+0

감사 표시를 트리거 포함하는 경우, 또한 좋은 사용하는 아이디어 포함 또는 종료 기능 (특히 하나의 예외 핸들러 임) 비슷한 아니다 또는 셧다운 기능 내의 다른 포함을 포함 할 수있다. 두 번째 함수가 실행되지 않는 문제를 일으키는 의도하지 않은 exit() 또는 die()가 발생했을 수 있습니다. 코드를 다시 작성하여 100 % 작동합니다. 좋은 대답으로 내 질문의 주요 부분을 다루는 +1과 정답을줍니다 : D – Sondre

관련 문제