PHP tanımlamak / apc_define_constants ile sabitler Un-define

4 Cevap php

I'm using constants for output messages in different languages. For example, if a user chooses "English", a file with this constant would be required:

define('welcomeMessage','Welcome!');

O "İspanyol" seçerse:

define('welcomeMessage','Bien Venidos!');

vs vs ..

Sorun dil aracılığıyla bir kullanıcı dolaşır oluşur. Ben ile sabitleri yeniden tanımlamak ya (bildiğim kadarıyla) / apc_define_constants tanımlayabilirsiniz olamaz. Ben silmek ve bunları yeniden tanımlayabilirsiniz?

Bunun için iyi bir çözüm var mı?

4 Cevap

Değer daha sonra değiştirilebilir eğer sürekli kullanmak mantıklı değil. Senin dilini ayarlayabilirsiniz ve yerine sabitleri kullanarak o sınıftan hoşgeldin mesajı alacağı statik bir sınıf oluşturarak öneriyoruz. En sınıf Lang seçildi diyelim:

Lang::setLang('spanish');
Lang::getWelcome();

GetWelcome () yöntemi setLang () ile set lang değerini kontrol eder ve uygun tercüme dize döndürür.

Statik bir sınıf kullanarak sınıfı örneğini zorunda kalmazsınız, ve diğer tüm kod yeni örneklerini yapmak zorunda ve kullanılan dili ayarlamak zorunda kalmadan statik sınıf başvuruda anlamına gelir.

Sen dilleri sabitler olarak tanımlanan olmamalıdır. Bir dil dersinde, veritabanı veya hatta yerel dosyaları koyarak gibi çok daha esnek bir yolu vardır. Kod onlara sahip sadece kötü.

Dil sınıfı soyut uzak gereken tüm ayrıntılar.

$language = new Language('english');
$welcomeString = $language->get('welcomeMessage');
....
$language = new Language('spanish');
$welcomeString = $language->get('welcomeMessage');

Dil kurucusuna aktarılan parametreleri hala bir get () argüman / w boyunca, tanımlar, ancak gerçek dil metin kod yaşamaması gerektiğini, ben veritabanında koyardım olabilir.

İşte (bu göründüğü kadar komik) yeniden tanımlanması gerekir "sabitler" gerektiğinde ben ne olduğunu:

// somewhere in your global file

function config($key, $value) {
    $GLOBALS[$key] = $value;
}

function conf($key) {
    return $GLOBALS[$key];
}

function configured($key) {
    return isset($GLOBALS[$key]);
}

Eğer "sabit" tanımlamak gerektiğinde Şimdi sadece kullanmak:

config('SHOW_AVATAR', true);

Bunu erişmek gerektiğinde kullanın:

if(conf('SHOW_AVATAR') === true)
  echo "AVATAR";

Eğer zaten tanımlı eğer kontrol etmek gerekiyorsa, kullanın:

if(configured('SHOW_AVATAR'))
  echo "Setting set";

Benim kod () işlevini tanımlamak gibi görünüyor Why I use this? Çünkü. Yani kolay değişkenlerden ayarlarını ayırmak için yapar. Ben esas olarak ben (sabitleri gibi) küresel kapsamı ile bir değişken var ama herhangi bir zamanda yeniden tanımlamak gerekiyor benim kısmi görünümlerde kullanabilirsiniz.

Bu size yardımcı olur umarım.