المعالجة الصحيحة للأخطاء في 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 بهدوء وأترك عملية إنشاء الفصل تتعطل؟
هل أقوم بإخراج خطأ أو تسجيل رسالة بطريقة ما (وهو ما سيكون من الجيد تحديد المشكلة) وإرجاع خطأ؟إذا كان الأمر كذلك، ما هي طريقة Zend للقيام بذلك؟
هل أقوم بتشغيل خطأ؟
هل أقوم بالاستثناء؟إذا كان الأمر كذلك، أي نوع؟
المحلول
ذلك يعتمد على نوع الخطأ.سأعتبره خطأً فادحًا إذا تعذر تحميل الفصل.وبالتالي سأطرح استثناءً، على سبيل المثال.
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
}
نصائح أخرى
يستخدم ZF نفسه طريقتين مختلفتين:
Zend_Loader
(ال قديم آلية التحميل التلقائي) يلقي أZend_Exception
في حالة وجود خطأ ماZend_Loader_Autoloader
عائداتfalse
عند عودة أداة التحميل التلقائي المسجلة المستخدمةfalse
ال Zend_Loader_Autoloader
لا يلتقط أي استثناء تم طرحه في أداة التحميل التلقائي المستخدمة حتى يظهر الاستثناء المخصص الخاص بك في النهاية من خلال Zend_Loader_Autoloader
.أنا شخصيا أعود للتو false
في حالة عدم تمكني من تحميل الفصل المطلوب.