Özel bir Zend_Autoloader düzgün hata işleme?

2 Cevap php

Ben Zend Framework autoloading dayalı özel bir autoloader kuruyorum (ilgili soru here).

Temel yaklaşım, bu soruya alınan, bir

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

ve daha sonra bir sınıf önek yeni autoloader sınıfını bağlayıcı.

Şimdi ne hakkında emin değilim uygun, ZF uyumlu bir şekilde (örneğin, "sınıf dosya bulunamadı") autoload yöntemi içinde hataları işlemek için nasıl. Ben çerçevede, onun sözleşmeler ve stil yeniyim.

  • Ben sessizce return false ve sınıf oluşturma süreci çökmesine izin musunuz?

  • Ben çıktılarının bir hata yapmak ya da bir şekilde mesaj log (sorunu saptamak için güzel olurdu) ve return false? Eğer öyleyse, o yapmanın Zend yolu nedir?

  • Ben bir hatayı tetikler mi?

  • Ben bir istisna mı? Eğer öyleyse, ne tür?

2 Cevap

Bu hata türüne bağlıdır. Bir sınıf yüklü olamaz eğer bu bir ölümcül hata düşünecektim. Bu nedenle ben bir özel durum atmak istiyorum, mesela

class My_Autoloader_Exception extends Exception {}

(Ben bu isteğe düşünecektim olsa) bu uzanacak için ZF paket düzeyinde özel İstisnalar bir çok kullanır ve aynı zamanda provides a class olduğunu göreceksiniz.

Bu arada, Zend_Exception kendi autoloader ile bir kullanım örneği var:

  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 kendisi iki farklı yaklaşımlar kullanır:

  • Zend_Loader (old autoloading mekanizması) bir Zend_Exception durumda bir terslik var atar
  • Zend_Loader_Autoloader döner false zaman kullanılan tescilli autoloader döner false

Zend_Loader_Autoloader kullanılan otomatik yükleyici atılmış herhangi bir istisna yakalamak değil nihayetinde özel bir istisnadır kadar Zend_Loader_Autoloader ile kabarcık. Ben şahsen sadece bir talep sınıfı yüklemek mümkün değilim durumda false return.