같은 : 예외가 set_exception_handler()
에게 주어진 콜백을 발생합니다
function destroy_handler() {
restore_exception_handler();
}
function update_handler() {
destroy_handler();
}
set_exception_handler(function ($e) {
echo "My exception handler";
update_handler();
throw new Exception("Throw this instead.");
});
throw new Exception("An exception");
가 실행됩니다
set_exception_handler(function ($e) {
echo "My exception handler";
restore_exception_handler();
throw new Exception("Throw this instead.");
});
throw new Exception("An exception");
또는 같은
restore_exception_handler()
이 호출 되 자마자 치명적인 오류가 발생합니다. 그 이유는 해당 클로저에 대한 동일한 참조가 자체 범위 내에서 스트로크 (또는 재 할당)됩니다 (동일한 내용은
Sameer K
에 게시 된 링크의
hanskrentel at yahoo dot de
의 예입니다).
두 번째 예제에서 중첩 된 범위를 사용하더라도 동일하게 나타납니다. 이것은 restore_exception_handler
이 마지막 세트 예외 처리기를 파괴하고 복사하지 않기 때문입니다 (변수를 다시 할당하거나 변수에 초기 값을 제공하는 표현식을 평가하는 동안 설정을 해제하는 것과 같습니다).
코드의 오류가 다른 파일을 가리키고 있다고 말하면 람다의 모든 호출을 검사하여 다른 파일의 함수 및 메소드에서 "점프"하고 코드를 다시 할당하거나 람다 자체에 대한 참조를 파괴합니다.