PHP sınıf adı çatışması mevcut, yaratıcı bir çözüm gerekiyor

4 Cevap php

Sana C #> 3.0 olarak uzatma yöntemleri "undeclare" veya "Redeclare" PHP bir sınıf, ne de kullanabilirsiniz farkındayız. Yani, burada benim durum.

Ben başkasının kod tabanı ile çalışıyorum. Onlar bir DateTime sınıfı yoktu PHP'nin biraz eski bir sürümünü kullanıyor olmanız gerekir, bu yüzden Zaman, Tarih, ve DateTime sınıfları ekler açık kaynak kodlu bir kütüphane mevcuttu. Eh, ben müşterinin sunucusuna bu dağıtmak için gitmek, ve bu sınıf zaten tanımlanır. O neden kaza gidermek için, ben bir "sınıf tanımlı değilse" onay eklemek, ancak (beklediğiniz gibi) sınıfların API tam olarak aynı değil gibi görünüyor, ve bir yerde kod bu olabilir ya da olabilir kullanılan dil sürümü ile birlikte DateTime sınıfının tanımsız yöntemleri kullanarak değil.

Bir sınıf boşaltmak için herhangi bir yolu, ya da bu çevrede almak için aklınıza gelebilecek herhangi bir yaratıcı yolu vardır. Ben tüm başvuruları için tüm dosyaları aramak ve belki sınıfını yeniden adlandırmak zorunda tercih ediyorum. Bu dağınık geliyor, ama bu benim tek seçenek olabilir sanırım. Ben çok bir yerde olur düzeltme ve tek bir yer tercih ederim.

Teşekkürler.

4 Cevap

Burada bazı iyi fikirler ...

Petruza önerdiği - - Bir ad alanı kullanarak muhtemelen bunu işlemek için en iyi yoldur ... ama PHP sadece 5.3 bulunuyor.

Alternatif olarak, kod üstlenmeden Robert'ın önerisi makul bir fikir ama muhtemelen zaman ve çaba iyi bir anlaşma alacaktır. Bu eninde sonunda yapılması gerekir olacağından, bunu yapmak isteyebilirsiniz.

Online sistem alıyorsanız öncelikli olduğunu ve sonradan refactor Alternatif olarak, ona sınıfını ve tüm başvuruları yeniden adlandırmak mümkün olabilir. DateTime company_DateTime - to - bir önek ekleyerek bunu eski yol ve sınıfları Namespacing konum çok zorlanmadan bir arada olmalıdır. Eğer destekleyen kütüphaneler yakında her zaman güncellemek varsa tabii, bu hayatı daha zor hale getirmek için gidiyor, bu yüzden körü körüne bu bir içine atlamak yok ...

Bir isim alanı içinde sınıf tanımı içine isteyebilirsiniz. Sonra geçerli DateTime sınıfı kullanan her dosyanın içinde bir "using namespace xxx" (Ben tam PHP sözdizimi hatırlamıyorum) beyan ederim.

Bu tam bir "tek bir yerde ve tek bir yer" çözüm değil, ama en azından sadece dosyaların başında ad başvurmak, sınıfa her başvuru değiştirmek zorunda değilsiniz.

Umarım bu yardımcı olur.

Belki de bu yardımcı olabilir: Unload dynamic class in PHP.

Ben PHP daha yeni sürümüne kod tabanı göç kalkışabilir. Eğer yeni PHP sürümüne üretim kodu kullanmak için gidiyoruz, o zaman zaten bu sürümü üzerinde test etmek gerekir. Eğer muhtemelen hedef sistemde yüklü olması eski sürümünü gerektiren gereken kod tabanı güncelleme ve test etmek için çaba yatırım yapmak istemiyorsanız. Aksi takdirde sahip kod doğru çalıştığını garanti hiçbir yolu yoktur.

Ve uygun araçlar dosyaların bir ton ile arama ve bu sınıfların tüm tekrarlarını belirlenmesi ile çok zor değildir.