カスタム Zend_Autoloader での適切なエラー処理は?
-
20-09-2019 - |
質問
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 ではどのような方法でそれを行うのでしょうか?
エラーが発生しますか?
例外をスローしますか?もしそうなら、どのようなものですか?
解決
エラーの種類に依存していること。クラスをロードできない場合、私はそれ致命的なエラーを検討したいです。したがって、私は、例えば、例外を投げると思います。
class My_Autoloader_Exception extends Exception {}
あなたは、ZFは、パッケージレベルのカスタム例外の多くを使用しても、<のhref =「http://framework.zend.com/manual/en/zend.exception.html」のrel = "nofollowをnoreferrerことがわかります「>これは(私は、このオプションを検討したいが)から拡張するために、クラスを提供しています。
なお、そのオートローダと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
}
他のヒント
ZF 自体は、次の 2 つの異なるアプローチを使用しています。
Zend_Loader
( 古い オートローディングメカニズム) をスローしますZend_Exception
何か問題があった場合に備えてZend_Loader_Autoloader
戻り値false
使用済みの登録済みオートローダーが戻ったときfalse
の Zend_Loader_Autoloader
使用されるオートローダーでスローされた例外をキャッチしないため、最終的にカスタム例外が Zend_Loader_Autoloader
. 。私は個人的にはただ戻ってきます false
要求されたクラスをロードできない場合に備えて。