2010-03-16 3 views
1

Zend Framework의 자동 로딩 (관련 질문 here)을 기반으로 맞춤형 오토로더를 만들고 있습니다.커스텀 Zend_Autoloader에서의 적절한 에러 처리?

기본적인 접근 방식은 그 질문에서 촬영

class My_Autoloader implements Zend_Loader_Autoloader_Interface 
{ 
    public function autoload($class) 
    { 
     // add your logic to find the required classes in here 
    } 
} 

다음 클래스 접두사에 새 자동 로더 클래스를 바인딩입니다.

이제 확실하지 않은 점은 autoload 메서드 (예 : "클래스 파일을 찾을 수 없음") 안의 오류를 적절한 ZF 규격으로 처리하는 것입니다. 나는 프레임 워크, 그것의 규칙 및 작풍에 새로운이다.

  • 조용히 false를 반환하고 클래스 생성 프로세스를 중단 시키나요?

  • 어떻게 든 오류 또는 로그 메시지를 출력합니까 (문제를 정확히 지적하는 것이 좋을까요?) false를 반환합니까? 그렇다면 Zend의 방식은 무엇입니까?

  • 오류가 발생합니까?

  • 예외가 발생합니까? 그렇다면 어떤 종류입니까?

답변

1

오류의 종류에 따라 다릅니다. 클래스를로드 할 수 없으면 치명적인 오류라고 생각합니다. 따라서 예외를 throw합니다.

class My_Autoloader_Exception extends Exception {} 

당신은 ZF (나는이 옵션을 고려 거라고하지만)에서 연장이에 대한 패키지 수준에서 사용자 정의 예외의 많은 또한 provides a class를 사용하는 것을 발견 할 것이다.

try { 
     // Calling Zend_Loader::loadClass() with a non-existant class will cause 
     // an exception to be thrown in Zend_Loader: 
     Zend_Loader::loadClass('nonexistantclass'); 
    } catch (Zend_Exception $e) { 
     echo "Caught exception: " . get_class($e) . "\n"; 
     echo "Message: " . $e->getMessage() . "\n"; 
     // Other code to recover from the error 
    } 
2

ZF 자체 개의 상이한 접근법 사용 :

  • Zend_Loader합니다 (이전 자동 로딩기구)를 Zend_Exception하여 발생

    또한, 그들의 오토로더 Zend_Exception의 사용 예가있다 케이스가 잘못된 경우

  • Zend_Loader_Autoloaderfalse을 반환합니다. 사용 된 등록 오토로더에 결국 사용자 정의 예외 사용 된 자동 로더에 던져 예외를 캐치하지 않습니다 Zend_Loader_Autoloaderfalse

를 반환 것까지 Zend_Loader_Autoloader을 통해 거품. 요청한 클래스를로드 할 수 없기 때문에 개인적으로는 false을 반환합니다.