2010-05-14 2 views
2

이렇게되는 PHP 스크립트는 어떻게됩니까?무한대 생성자에서 던지고

class FooException extends Exception 
{ 

    public function __construct() { 
     throw new FooException; 
    } 
} 

그것은 단순히 시간 초과는 실행 시간이 초과 될 때 아마 같은

while (TRUE) { 
    new Exception(); 
} 

로, 또는 몇 가지 치명적인 오류와 함께 실패?

+1

흥미로운 질문입니다. 왜 시험해 보지 않으시겠습니까? –

답변

2

첫 번째 경우에는 예외가 생성되지 않으므로 아무 일도 일어나지 않습니다.

두 번째 경우에는 예외가 throw되지 않으므로 일반 무한 루프가 발생합니다.

throw new FooException(); 

그것은 결국 모든 메모리 소비 무한 루프가 발생합니다 : 내가 PHP에서 그것을 시도

 
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 44 bytes) 
+0

물론 예외는 예외입니다. while 회 돌이는 데모와 마찬가지로 거기에 있었지만 지적해야했습니다. 어쨌든 고마워, 그냥 PHP가 그것을 확인하고 치명적인 오류와 함께 실패했는지 알고 싶었어요. –

+0

재미있는 점은 최대 재귀 깊이가 아니라 메모리 오류가 발생한다는 것입니다. – selfawaresoup

0

그냥 테스트 할 수 있지만 예외를 throw하고 예외가 이미 throw 된 경우 치명적인 오류가 발생합니다.

편집 : 확인, 혼란 스러웠습니다. 여기서 메모리 부족 치명적인 오류가 발생합니다.

class FooException extends Exception 
{ 

    public function __construct() { 
     throw new FooException; 
    } 
} 

throw new FooException(); 

예외 처리기에서 예외를 throw 할 때 설명한 내용은 다음과 같습니다.

1

그러나 당신은 마지막에이 줄을 추가하여 첫 번째 예제를 수정하는 경우 5.2.8 (끝에 new FooException(); 추가) 메모리가 부족합니다.

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 40 bytes) on line 5

관련 문제