1

Zend Framework のオートローディングに基づいてカスタム オートローダを構築しています (関連する質問はこちら)。

その質問から取られた基本的なアプローチは、

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の方法は何ですか?

  • エラーをトリガーしますか?

  • 例外をスローしますか? もしそうなら、どんな種類ですか?

4

2 に答える 2

2

ZF 自体は、次の 2 つの異なるアプローチを使用します。

  • Zend_Loader(古いオートローディング メカニズム)Zend_Exception何か問題が発生した場合にスローします
  • Zend_Loader_Autoloaderfalse使用された登録済みオートローダーが戻ったときに戻りますfalse

Zend_Loader_Autoloader、使用されたオートローダーでスローされた例外をキャッチしないため、最終的にカスタム例外がZend_Loader_Autoloader. false要求されたクラスをロードできない場合に備えて、私は個人的に戻ります。

于 2010-03-16T13:23:32.727 に答える
1

それはエラーの種類によって異なります。クラスを読み込めない場合は致命的なエラーだと思います。したがって、私は例外をスローします、例えば

class My_Autoloader_Exception extends Exception {}

ZFはパッケージレベルで多くのカスタム例外を使用し、これを拡張するためのクラスも提供していることがわかります(ただし、これはオプションだと思います)。

ちなみに、Zend_Exceptionオートローダーでの使用例があります。

  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
  }
于 2010-03-16T13:20:08.757 に答える