Sabitleri veya kayıt sınıf?

3 Cevap php

Ben bir Registry Sınıf geldim ve ben bu konuda rahatsız ya da böyle veritabanı bağlantı bilgileri, web sitesi URI, vb gibi site genelindeki küresel değişkenler için ayrı kullanımını sabitleri gitmek, ya da orada olup olmadığını merak ediyorum?

Burada rastladım sınıfı bulunuyor:

<?php

    Class Registry {


     private $vars = array();

     public function __set($index, $value)
     {
            $this->vars[$index] = $value;
     }


     public function __get($index)
     {
            return $this->vars[$index];
     }

    }

    ?>

Temelde büyülü alıcılar / ayarlayıcıları ile bir dizi vardır, sadece bir sınıf. Sabitleri kullanarak aksine bu kodla herhangi bir dezavantajları var mı?

3 Cevap

O birbirlerine, örneğin uzatabilirsiniz (farklı ortamlar için) birden fazla yapılandırmaları olabilir eğer sabitleri bir grup karşılaştırıldığında yapılandırma sınıfların büyük avantajı

 // define default Config and custom ones for specific environments

 class BasicConfig {
     function __construct() {
          $this->db_driver = 'mysql';
          // other params that are common to all configs
 }

 class TestConfig extends BasicConfig {
     function __construct() {
          parent::__construct();
          $this->db_user = 'root';
          $this->db_password = '';
          // other params for test config
 }

 class ProductionConfig extends BasicConfig {
     function __construct() {
          parent::__construct();
          $this->db_user = 'liveuser';
          $this->db_password = 'secret';
          // other params for production config
 }

 // change configuration depending on where we're running
 if($_SERVER['SERVER_NAME'] == 'local')
     $config = new TestConfig;
 else
     $config = new ProductionConfig;

 // the main application doesn't care which config we're using
 $application->init($config);

Bir kullanırken küçük bir yükü var olsa registry, bunu kullanmak için bir tavsiye ediyorum.

  1. Tüm bilgi almak için ortak bir yer var gibi hata ayıklama yardımcı olacaktır.
  2. Kullanıcılar URL'leri manipüle ederek kendi değerlerini ekleyemezsiniz çünkü, daha güvenli. register_globals çoğu zaman kapalı olacak, ancak bir web alanı sağlayıcısı mağazaları web sitesi eğer, kontrol değildir.

Eğer kendi alıcı ve ayarlayıcıları tanımlayarak daha açık içerik bulunuyor yapmak, böylece bir alternatif olarak, kendi kayıt oluşturabilirsiniz.

Sabitler tarafından sana adında değişkenler demek varsayıyorum.

Neyse sizin örnekte sınıfın avantajı artık döngü yoluyla ve veri bir değişken miktarda saklayabilirsiniz edebilirsiniz Object tüm değişkenlerin bir dizi olması.

Dezavantajı bakarak size depolanmış ne hakkında hiçbir şey ve ne yaptığını söylediğinde artık bir nesne olması. "Kayıt Defteri" adlı bir sınıf halinde bu mantıklı olabilir, ama bir "Araba" denilen bir şey için değil.

Bellek bilge en etkili yöntem muhtemelen nesneyi nasıl kullandığınıza bağlıdır.