Varolan kodu bozmadan PHP ad alanını bir kütüphaneye nasıl eklerim?


10

Şirketim, yıllar boyunca PHP 5.3 ad alanları eklemeden çok önce başlayan modüler bir PHP çerçevesi oluşturdu. Son zamanlarda, kitaplığımızın yeni kodunda ad alanlarını kullanmaya karar verdik ve nihayetinde eski kodu ad alanı haline getirmeyi amaçlıyoruz. Ancak, bir v5.3 öncesi kod tabanına ad alanları eklemenin iyi bir fikir olmadığını belirlemek için üzerinde çalışmaya çalıştığımız birkaç sorun var:

  1. Bir sınıfı adlandırabilir, ancak tüm genel sınıfların bir \önek gerektirmeyecek şekilde genel ad alanını alabilir miyim (kullanabilir) ?
  2. Kütüphanemizde mevcut bir sınıfı adlandırırsak, çerçeve yükseltilir tamamlanmaz mevcut tüm projelerin kırılmasını nasıl önleyebiliriz? Örneğin, can sınıfın adı kütüphanesi değişikliği ThemeEngineiçin \module\theme\ThemeEngine, ancak mevcut web siteleri arama ThemeEngineolmadan herhangi kod değişiklik? Öyleyse, bu kod neye benzeyecekti?

Yanıtlar:


2
  1. Ne yazık ki sadece sınıfları 'kullanamazsınız', sadece sınıflar: http://www.php.net/manual/en/language.namespaces.importing.php . Düzenleme: Sınıflardan, örneklerden birinde ArrayObject ile olduğu gibi, genel ad alanından içe aktarabilirsiniz.

  2. Global ad alanında bulunan önceden varolan tüm sınıfların teorik olarak sınıfları iyi bulması için genel bir kullanım ifadeleri bölümüne sahip olabilirsiniz. Teorik olarak ...

Seninle aynı gemideyiz. Ad alanları kullanmayan, ancak _ namespace faker (Zend_Db_Table ... gibi) kullanan bazı eski kodlarımız var ve sahte ad alanları bile olmayan eski kodlarımız var. Muhtemelen aynı rotayı izleyeceğiz, ancak yine de mümkün olup olmadığını test etmemiz gerekiyor. İyi şanslar!


1

Sonunda yaptığım şey kullanmaktı - ihtiyacım olan bireysel sınıfları içe aktarmak için 'kullan'

örneğin, aşağıdaki gibi her şeyin önüne '/' eklemek yerine:

\DateTime()

İsim alanımın altına ekledim

namespace MyProject;
use DateTime;

...
DateTime();     //without \
...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.