Sabitinin değeri değişken ise, o zaman bir sabit değildir, ama bir değişken.
Eğer (doğru) uygulama şeyler capsuled tutmaya çalışıyor ve uzak küresel kapsam olduğundan, kayıt Pattern ilginizi çekebilir. Bir Registry bunu içine atmak ve ne olursa mağazalar uygulama boyunca dünya çapında erişilebilir olduğunu temelde övmek dizidir.
Bazı kaynaklar:
Eğer gerçekten umutsuz ve have to have sabit yeniden tanımlanmış ise EDIT, kullanabilirsiniz
Runkit paylaşılan barındırma ve ben bunu bir kod koku ihtiyacı düşünürsek kullanılabilir, ama burada (sizin bootstrap olarak) temelde yapardım nasıl olabilir
if ( file_exists('xyc') ) {
runkit_constant_redefine('Constants::USERNAME', 'xyz');
}
EDIT Bazı daha fazla seçenek (tüm bunlar tam olarak güzel ya):
class Abc { const FOO = 1; const BAR = 2; }
class Xyz extends Abc { const FOO = 2; }
class_alias(file_exists('abc') ? 'Abc' : 'Xyz', 'Constants');
Bunun için Abc için geçerli sabitler sınıf adlandırmak ve bunu genişletmek ve (örnekte FAN) ADI sabiti üzerine yazmak için bir ikinci sınıf Xyz eklersiniz. Eğer Constants::USERNAME yapmak için kullanılır, çünkü bu besbelli, kodunuzu kıracak, böylece eski sınıf adı için bir takma ad oluşturmak zorunda. Sınıf Sabitler işaret edecek, koşullu onay ile karar verilir. Bu PHP5.3 gerektirir.
Önceden 5.3 çözüm basitçe, iki farklı isimler altında örneğin Sabitler sınıfı dosyayı kaydetmek olacaktır abc_constants.php ve xyz_constants.php, USERNAME, xyz tutmak için buna ikincisi değiştirmek ve ardından include ya da dosya çeke bağlı.
Veya bir yer tutucu ile ve yerine bir dize olarak bir değişken yük sınıfının dahil USERNAME değerini değiştirin. Sonra FileCheck sonucuna göre yer tutucu yerine ve eval dize, etkili bir sınıf bu şekilde dahil.
But I have to say it again: I strongly suggest refactoring your code over using these.