PHP içinde autoloading kullanmak için kötü mü?

4 Cevap php

Dan php.net:

PHP 5, bu artık gerekli değildir. Otomatik durumda henüz tanımlı olmayan bir sınıf / arabirimi kullanmak için çalışıyoruz adlandırılan bir __autoload() fonksiyon tanımlayabilir. Bu işlevini çağırarak betik motoru PHP bir hata ile başarısız önce sınıfı yüklemek için son bir şans verilir.

Şimdi bilmek isteyen am, bu __autoload dinamik bir sitede uygun sınıfları yüklemek için sadece kullanmak için kötü bir uygulamadır?

Benim site kurulum yolu index.php dosyasına dosyaları dahil etmek için, örneğin http://www.site.com/index.php?p=PAGE-I-WANT-TO-LOAD

Ben forumları bölüm veya sitemde bloglar bölümünde duyuyorum eğer öyleyse, ben sadece uygun sınıflar ve fonksiyonlar yüklenecek istiyorum, bu yüzden autoload kullanın ama __autoload kullanarak olmalıdır ben, elle bir dosya içerir asla son çare ya da ben bile yüksek trafik sistemi üzerinde ince yapıyorum nedir?

4 Cevap

Kötü? Hayır __autoload() PHP 5 için benim en sevdiğim eklemeler biridir. Bu sorumluluğu kaldırır (ve sıkıntı) el / eklemek zorunda sınıfı, uygulama için gerekli dosyaları gerektirir. Söyleniyor, sadece 'uygun dersleri' yüklü olduğundan emin olmak için geliştirici olarak size kalmış. Bu kolay bir yapılandırılmış adlandırma şeması ve dizin yapısı ile yapılır. Bol örnekler düzgün __ autoload (), bir Google araması yapmak için kullanmak ve bol miktarda bilgi bulabilirsiniz nasıl çevrimiçi vardır.

Özdevinimli_yükle sadece ne tabi sınıfları yüklemek için iyi bir yoldur.

> = 5.1.2, PHP 5, eski __ autoload ile sorunların çoğu () spl_autoload_register() sayesinde kayboldu.

Şimdi bilmek isteyen am, bu sadece dinamik bir sitede uygun sınıfları yüklemek için __ autoload kullanmak için kötü bir uygulamadır?

Hiç de değil. Sen autoload güvenebilirsiniz, yapmanız gereken tüm iyi bir adlandırma kuralı hazırlamak ve verimli bir autoloader uygulamaktır.

Düşünün bir önemli mesele var. Zend Guard şeyleri adlandırmak eğilimi nedeniyle autoloading ve Zend Guard kullanmaya karar adlandırma kuralı büyük olasılıkla aynı olmayacak anlamına gelecektir ki, birlikte iyi oynamak istemiyorum. Zend Guard (ya da bu konuda herhangi bir başka obfuscator) kullanarak olacaksa büyük olasılıkla tüm dosyaları elle eklemek zorunda olacak.

İşte Zend Guard kullanım kılavuzundan bir alıntı:

Autoloading classes will not work since the filename on the disk would not match the obfuscated class name.

Eğer kötü bir autoloading işlevi tanımlamak eğer autoload __ için tek tehlike () 'dir. Genellikle, bir performans isabet açısından almak için gidiyoruz tüm PHP sınıfları içeren doğru dosyaları arar gibi birkaç disk istiyor olduğunu. Baş tüm bu can sıkıcı include() aramaların kurtulmak oluyor.

Eğer bu seviyede performans konusunda endişeli iseniz, o zaman zaten böyle APC gibi bir opcode önbellek kullanıyor olmalıdır.