2011-06-09 14 views
16

İlginç bir dilüsyona girdim. Bir DataMapper sınıfında, bir veritabanından döndürülen satırlar için kullanılacak bir sınıf adı oluşturuyorum.Bir sinyalin bir hata tetiklenmeden var olup olmadığı nasıl algılanır

Sorun şu ki, tüm sınıflarım otomatik olarak yüklenir ve birçok yerden (kitaplık, uygulama/model, vb.) Gelebilir ve oluşturulan sınıf adının gerçekten olup olmadığını kontrol etmek istedim. Çok yararlı değil ...

try 
{ 
    $test = new $className(); 
} 
catch(Exception $ex) 
{ 
    // Class could not be loaded 
} 

Ama tabii, php hataları sınıfını söyleyerek (yerine bir istisna atma)

bulunamadı: Şimdi, bir düşünürdüm. Sınıfın yüklenip yüklenemeyeceğini görmek için tüm dizinleri aramak için Zend_Loader'daki otomatik yükleyiciyi yeniden yazmaktan kısa bir süre sonra bunu gerçekleştirmek için herhangi bir yol var mı?

Yalnızca Sınıf Bulunamadı hatası görünmesine izin vermek yerine bunu neden yapmak istediğimi merak eden herkes için, sınıf bulunmazsa, hayatımı oluşturmak için önceden belirlenmiş bir konumda bir sınıf oluşturmak istiyorum Bu proje ilerledikçe kolay.

Şimdiden teşekkürler! Terry

P.S. Daha fazla bilgiye ihtiyacın olursa haberim olsun. sınıf henüz yüklenmemesi gerektiğini eğer

cevap

26

PHP'nin fonksiyonu class_exists() autoloader tetiklemek için bir bayrak vardır:

http://www.php.net/class_exists

Yani basitçe

if (!class_exists($className)) { 
    // generate the class here 
} 
+0

Peki yazma, ben aptal hissetmiyorum şimdi. Bu sayfayı gördüm, "tanımlandı" diyerek açıklamayı okuyun ve parametreleri atlayın. Teşekkürler! – TJMonk15

+3

Ayrıca ikinci param ($ autoload) yanlış olarak ayarlamak zorunda kaldı – waaadim