Php 5 bir sınıfa yapılandırma değişkenleri almak için en iyi yolu nedir?

2 Cevap php

Bu benim DB sınıf içindir. Ben bir süre için bir usul delikanlı olmuş, OO yeni am, bu yüzden hala biraz karanlık değilim.

Benim ilk fikir ayarlayıcı işlevleri / yöntemleri bir demet kullanarak .. ama bir sürü yazdıktan sonra, ben şöyle, PHP işlevini tanımlamak kullanarak düşündüm.

define('MYSQL_USERNAME', 'jimbo');

Bu kabul edilebilir bir uygulama mı? En iyi yöntem nedir? Gerçekten setter fonksiyonları bir demet (Ben şu anda bu sınıfları kullanarak yalnızca geliştirici değilim) benim sınıf yığılmayı olmalıdır. Sizin çözümler nelerdir?

Teşekkür ederiz!

2 Cevap

Ben sadece sınıfta değişmez sabitler için anımsatıcı adları oluşturmak için const kullanın. define() işlevi sınıfının parçası olarak, küresel alanda sabitleri oluşturur sabitleri oluşturmaz.

class MyClass
{
  const CONFIG_FILE = 'myapp.ini';

Sınıf yapılandırma verileri genellikle sınıfta bir protected karma-dizi olarak beyan ederim. Anahtar mnemonic'ler için yararlıdır. Değerler varsayılan vardır.

  protected $config = array(
    'logfile' => 'err.out',
    'debug' => false
  );

Sonra parse_ini_file() ile bir "ini" formatında dosya yüklemek ve array_merge() sınıf geneli diziye tuşları harita için kullanabilirsiniz:

  public function __construct() {
    $ini_data = parse_ini_file(self::CONFIG_FILE, __CLASS__);
    $this->config = array_merge($this->config, $ini_data);
  }

}

bu ile başa çıkmak için birkaç seçenek muhtemelen vardır:

  1. Sadece belirleyiciler kullanmak, mükemmel kabul edilebilir, ama yapılandırma seçenekleri bir sürü ile biraz "söz" alabilirsiniz.

  2. geçmek için bir yapılandırma nesnesi kullanabilirsiniz:

    $config = (object) array(
       'prop1' => 'somevalue',
       'prop2' => 'somevalue2',
       'prop3' => 'somevalue3',
    );
    
    
    $db = new DB($config);
    
  3. Eğer sabitleri kullanmak istiyorsanız, global namespace kirliliğini önlemek için sınıfa onları kısıtlamak olabilir:

    class DB {
        const USER = 'mysqluser';
    }
    
    
    echo DB::USER; // for example