سؤال

أقوم بإنشاء أداة تحميل تلقائية مخصصة استنادًا إلى التحميل التلقائي لـ 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 في حالة عدم تمكني من تحميل الفصل المطلوب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top