$ _xxx gibi değişken bir php adını vermek kabul edilir mi?

Bir site yapıyorum ve "settings.php" adlı bir ayar dosyası ekledim, Bence küresel bir var adıyla kaydetmek için harika görünüyor: $ _SETTINGS site ayarlarının bir dizisi olarak (db_name, db_pass .... etc) olduğu gibi:

<?php
    $_SETTINGS = array();
    $_SETTINGS['DB_HOSTNAME']= 'localhost';
    $_SETTINGS['DB_NAME'] = 'db_test';
    $_SETTINGS['DB_USERNAME'] = 'db_user';
    $_SETTINGS['DB_PASSWORD'] = 'p422w0rd';
 ?>

ve sonra alt sayfalardaki bu ayarlara erişin: $ _SETTINGS ...

bu kod gayet iyi çalışıyor ama merak ediyorum, PHP programcılar topluluğu arasında kendi değişkenlerinizi $ _ olarak adlandırmanız kabul edilebilir mi? veya kodum kötü bir tasarım olarak kabul edilir?

Teşekkürler

0
@ Rizier123 cevabınız benim tarafımdan son cevap olarak kabul edildi -> bir var $ _SETTINGS isminin yasal ve iyi olması, ancak üstbilgisel kod okuyucular için kafa karıştırıcı olmasına neden olabilir.
katma yazar itai, kaynak
@ Rizier123 cevabınız benim tarafımdan son cevap olarak kabul edildi -> bir var $ _SETTINGS isminin yasal ve iyi olması, ancak üstbilgisel kod okuyucular için kafa karıştırıcı olmasına neden olabilir.
katma yazar itai, kaynak
@ Rizier123 cevabınız benim tarafımdan son cevap olarak kabul edildi -> bir var $ _SETTINGS isminin yasal ve iyi olması, ancak üstbilgisel kod okuyucular için kafa karıştırıcı olmasına neden olabilir.
katma yazar itai, kaynak
@ Rizier123 cevabınız benim tarafımdan son cevap olarak kabul edildi -> bir var $ _SETTINGS isminin yasal ve iyi olması, ancak üstbilgisel kod okuyucular için kafa karıştırıcı olmasına neden olabilir.
katma yazar itai, kaynak
Bu gerçekten sadece kişisel tercihler bir şey. Elbette, $ _SETTINGS gibi benzersiz bir global uygulama pratiktir ve amacını açık bir şekilde gösterir. (Uygulamanın diğer yarısını hala veritabanına bölüyorsanız aptalca olurdu.)
katma yazar mario, kaynak
Bu gerçekten sadece kişisel tercihler bir şey. Elbette, $ _SETTINGS gibi benzersiz bir global uygulama pratiktir ve amacını açık bir şekilde gösterir. (Uygulamanın diğer yarısını hala veritabanına bölüyorsanız aptalca olurdu.)
katma yazar mario, kaynak
Bu gerçekten sadece kişisel tercihler bir şey. Elbette, $ _SETTINGS gibi benzersiz bir global uygulama pratiktir ve amacını açık bir şekilde gösterir. (Uygulamanın diğer yarısını hala veritabanına bölüyorsanız aptalca olurdu.)
katma yazar mario, kaynak
Peki bu soruyla neredeyiz?
katma yazar Rizier123, kaynak
Peki bu soruyla neredeyiz?
katma yazar Rizier123, kaynak
Peki bu soruyla neredeyiz?
katma yazar Rizier123, kaynak
Peki bu soruyla neredeyiz?
katma yazar Rizier123, kaynak
bu senin kodun ne istersen yap
katma yazar user557846, kaynak

8 cevap

Yapabilirsiniz, ancak bunu önermem, çünkü superglobal değişkenler ayrıca bu kalıba/ön eke sahiptir. $ _SERVER , $ _SESSION , $ _GET bu biraz daha kafa karıştırıcı olabilir.

Ancak kılavuzuna göre. Teknik şunları yapabilirsiniz:

geçerli bir değişken adı, bir harf veya alt çizgi ile başlar , herhangi bir sayıda ardından harfler, sayılar veya alt çizgiler . Normal bir ifade olarak şöyle ifade edilir: '[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *'

Sonunda ne yaptığınız kişisel bir tercih.

1
katma

Yapabilirsiniz, ancak bunu önermem, çünkü superglobal değişkenler ayrıca bu kalıba/ön eke sahiptir. $ _SERVER , $ _SESSION , $ _GET bu biraz daha kafa karıştırıcı olabilir.

Ancak kılavuzuna göre. Teknik şunları yapabilirsiniz:

geçerli bir değişken adı, bir harf veya alt çizgi ile başlar , herhangi bir sayıda ardından harfler, sayılar veya alt çizgiler . Normal bir ifade olarak şöyle ifade edilir: '[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *'

Sonunda ne yaptığınız kişisel bir tercih.

1
katma

Yapabilirsiniz, ancak bunu önermem, çünkü superglobal değişkenler ayrıca bu kalıba/ön eke sahiptir. $ _SERVER , $ _SESSION , $ _GET bu biraz daha kafa karıştırıcı olabilir.

Ancak kılavuzuna göre. Teknik şunları yapabilirsiniz:

geçerli bir değişken adı, bir harf veya alt çizgi ile başlar , herhangi bir sayıda ardından harfler, sayılar veya alt çizgiler . Normal bir ifade olarak şöyle ifade edilir: '[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *'

Sonunda ne yaptığınız kişisel bir tercih.

1
katma

Yapabilirsiniz, ancak bunu önermem, çünkü superglobal değişkenler ayrıca bu kalıba/ön eke sahiptir. $ _SERVER , $ _SESSION , $ _GET bu biraz daha kafa karıştırıcı olabilir.

Ancak kılavuzuna göre. Teknik şunları yapabilirsiniz:

geçerli bir değişken adı, bir harf veya alt çizgi ile başlar , herhangi bir sayıda ardından harfler, sayılar veya alt çizgiler . Normal bir ifade olarak şöyle ifade edilir: '[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *'

Sonunda ne yaptığınız kişisel bir tercih.

1
katma

Benim kişisel görüşüm bunun kötü bir fikir olduğu yönünde. Daha iyi bir çözüm, tüm uygulamanız boyunca yapılandırma sağlayan singleton sınıfı oluşturmaktır.

Bunun gibi bir şey:

class MyConfigProvider
{

    private $config = array();

    private static $instance = null;

    public static function getInstance()
    {
        if (self::$instance === null)
            self::$instance = new self();

        return self::$instance;
    }

    private function __construct(){}

    public function getConfig()
    {
        return $this->config;
    }

    public function setConfig(array $config)
    {
        $this->config = $config;
    }
}

Uygulamanızın tüm yerlerinde yapılandırmayı

$config = MyConfigProvier::getInstance()->getConfig();

En iyi çözüm değil, ancak uygulanması kolay ve işe yarıyor

1
katma
Ben de aynı dosya içerisine dahil edilmiş dosyadaki çoklu dil desteğini kullanıyorum ... like: "en.lang.php": $ _LANG ['PAGE_TITLE'] = 'İngilizce sayfa başlığı';
katma yazar itai, kaynak
merhaba, biraz kafam karıştı, en iyi çözüm AVOID singleton sınıflarına mı? kodlarım her zaman dağınıktır, ancak her gün onu geliştirmeye çalışıyorum ... yeni sitemde hala kullanıcı arayüzü stillendirme bölümündeyim ve sadece mantığa taşındım ... bu yüzden ayarlar bölümünü yapmamı nasıl önerirsiniz? mümkün olan en iyi yol?
katma yazar itai, kaynak
Bu sınıfı kullanmanın faydaları nelerdir, artı bunun en iyi çözüm olmadığını söylemiştiniz. En iyi çözüm nedir?
katma yazar itai, kaynak
merhaba, cevabınız için teşekkürler, lütfen index.php dosyasında ayar olarak bulunan bir ayarlar dizisinden sonra neden daha iyi olduğunu söyleyebilir misiniz? neden önemli? daha iyi anlamak istiyorum ...
katma yazar itai, kaynak
İkinci soru, benim tavsiyem, hazırlanan kütüphaneyi kullanarak PHP'ye kendiniz yazmamanız. Örneğin. gettext modülü. C/C ++ dilinde yazılmış PHP modülleridir ve PHP kodundan çok daha hızlı olacaktır (bkz. php.net/manual/en/function.gettext.php ). Getttext tanım dosyaları oluşturmak için Poedit'i kullanabilirsiniz: poedit.net
katma yazar Petr Jindra, kaynak
İlk soruya: singleton sınıflarının bir çirkin özelliği var: daha büyük bir projede bu singleton nesnesinin bir kısmını beklediğinizde durum olabilir (bu durumda yüklü config) ancak bu eylemden sorumlu mantık henüz çağrılmadı. En iyi çözüm, bazı config tutucu örneklerini oluşturmak ve tüm fabrika sınıflarına enjekte etmektir. Bkz. Zend Framework 2, ServiceLocator sınıfı. Bu yaklaşımın dezavantajı, uygulamanızda çok daha fazla destek kodudur (ancak iyi yazarsanız, diğer projelerde tekrar kullanılabilir).
katma yazar Petr Jindra, kaynak
En iyi çözüm, singleton sınıflarından tamamen kaçınmaktır, fakat bunu yapmak için uygulamanızın temel mantığını yeniden yazmam gerekiyor. Bağımlılık enjeksiyonu hakkında bir şeyler okumaya çalışın.
katma yazar Petr Jindra, kaynak
merhaba, küresel değişkenleri kullanmaktan daha temiz bir çözüm. Genel değişkenler, genel kapsam dışında kalmak için çok tehlikelidir, çünkü bu genel değişkenlerdeki (ör. Kodunuzdaki yazım hatası) herhangi bir değişiklik, programınızın farklı bileşenlerinde beklenmeyen davranışlar yapabilir. Bununla orijinal yapılandırma verilerini uygulamanızın dışında tutursunuz.
katma yazar Petr Jindra, kaynak

Benim kişisel görüşüm bunun kötü bir fikir olduğu yönünde. Daha iyi bir çözüm, tüm uygulamanız boyunca yapılandırma sağlayan singleton sınıfı oluşturmaktır.

Bunun gibi bir şey:

class MyConfigProvider
{

    private $config = array();

    private static $instance = null;

    public static function getInstance()
    {
        if (self::$instance === null)
            self::$instance = new self();

        return self::$instance;
    }

    private function __construct(){}

    public function getConfig()
    {
        return $this->config;
    }

    public function setConfig(array $config)
    {
        $this->config = $config;
    }
}

Uygulamanızın tüm yerlerinde yapılandırmayı

$config = MyConfigProvier::getInstance()->getConfig();

En iyi çözüm değil, ancak uygulanması kolay ve işe yarıyor

1
katma
Ben de aynı dosya içerisine dahil edilmiş dosyadaki çoklu dil desteğini kullanıyorum ... like: "en.lang.php": $ _LANG ['PAGE_TITLE'] = 'İngilizce sayfa başlığı';
katma yazar itai, kaynak
merhaba, biraz kafam karıştı, en iyi çözüm AVOID singleton sınıflarına mı? kodlarım her zaman dağınıktır, ancak her gün onu geliştirmeye çalışıyorum ... yeni sitemde hala kullanıcı arayüzü stillendirme bölümündeyim ve sadece mantığa taşındım ... bu yüzden ayarlar bölümünü yapmamı nasıl önerirsiniz? mümkün olan en iyi yol?
katma yazar itai, kaynak
Bu sınıfı kullanmanın faydaları nelerdir, artı bunun en iyi çözüm olmadığını söylemiştiniz. En iyi çözüm nedir?
katma yazar itai, kaynak
merhaba, cevabınız için teşekkürler, lütfen index.php dosyasında ayar olarak bulunan bir ayarlar dizisinden sonra neden daha iyi olduğunu söyleyebilir misiniz? neden önemli? daha iyi anlamak istiyorum ...
katma yazar itai, kaynak
İlk soruya: singleton sınıflarının bir çirkin özelliği var: daha büyük bir projede bu singleton nesnesinin bir kısmını beklediğinizde durum olabilir (bu durumda yüklü config) ancak bu eylemden sorumlu mantık henüz çağrılmadı. En iyi çözüm, bazı config tutucu örneklerini oluşturmak ve tüm fabrika sınıflarına enjekte etmektir. Bkz. Zend Framework 2, ServiceLocator sınıfı. Bu yaklaşımın dezavantajı, uygulamanızda çok daha fazla destek kodudur (ancak iyi yazarsanız, diğer projelerde tekrar kullanılabilir).
katma yazar Petr Jindra, kaynak
İkinci soru, benim tavsiyem, hazırlanan kütüphaneyi kullanarak PHP'ye kendiniz yazmamanız. Örneğin. gettext modülü. C/C ++ dilinde yazılmış PHP modülleridir ve PHP kodundan çok daha hızlı olacaktır (bkz. php.net/manual/en/function.gettext.php ). Getttext tanım dosyaları oluşturmak için Poedit'i kullanabilirsiniz: poedit.net
katma yazar Petr Jindra, kaynak
En iyi çözüm, singleton sınıflarından tamamen kaçınmaktır, fakat bunu yapmak için uygulamanızın temel mantığını yeniden yazmam gerekiyor. Bağımlılık enjeksiyonu hakkında bir şeyler okumaya çalışın.
katma yazar Petr Jindra, kaynak
merhaba, küresel değişkenleri kullanmaktan daha temiz bir çözüm. Genel değişkenler, genel kapsam dışında kalmak için çok tehlikelidir, çünkü bu genel değişkenlerdeki (ör. Kodunuzdaki yazım hatası) herhangi bir değişiklik, programınızın farklı bileşenlerinde beklenmeyen davranışlar yapabilir. Bununla orijinal yapılandırma verilerini uygulamanızın dışında tutursunuz.
katma yazar Petr Jindra, kaynak

Benim kişisel görüşüm bunun kötü bir fikir olduğu yönünde. Daha iyi bir çözüm, tüm uygulamanız boyunca yapılandırma sağlayan singleton sınıfı oluşturmaktır.

Bunun gibi bir şey:

class MyConfigProvider
{

    private $config = array();

    private static $instance = null;

    public static function getInstance()
    {
        if (self::$instance === null)
            self::$instance = new self();

        return self::$instance;
    }

    private function __construct(){}

    public function getConfig()
    {
        return $this->config;
    }

    public function setConfig(array $config)
    {
        $this->config = $config;
    }
}

Uygulamanızın tüm yerlerinde yapılandırmayı

$config = MyConfigProvier::getInstance()->getConfig();

En iyi çözüm değil, ancak uygulanması kolay ve işe yarıyor

1
katma
Bu sınıfı kullanmanın faydaları nelerdir, artı bunun en iyi çözüm olmadığını söylemiştiniz. En iyi çözüm nedir?
katma yazar itai, kaynak
Ben de aynı dosya içerisine dahil edilmiş dosyadaki çoklu dil desteğini kullanıyorum ... like: "en.lang.php": $ _LANG ['PAGE_TITLE'] = 'İngilizce sayfa başlığı';
katma yazar itai, kaynak
merhaba, biraz kafam karıştı, en iyi çözüm AVOID singleton sınıflarına mı? kodlarım her zaman dağınıktır, ancak her gün onu geliştirmeye çalışıyorum ... yeni sitemde hala kullanıcı arayüzü stillendirme bölümündeyim ve sadece mantığa taşındım ... bu yüzden ayarlar bölümünü yapmamı nasıl önerirsiniz? mümkün olan en iyi yol?
katma yazar itai, kaynak
merhaba, cevabınız için teşekkürler, lütfen index.php dosyasında ayar olarak bulunan bir ayarlar dizisinden sonra neden daha iyi olduğunu söyleyebilir misiniz? neden önemli? daha iyi anlamak istiyorum ...
katma yazar itai, kaynak
İlk soruya: singleton sınıflarının bir çirkin özelliği var: daha büyük bir projede bu singleton nesnesinin bir kısmını beklediğinizde durum olabilir (bu durumda yüklü config) ancak bu eylemden sorumlu mantık henüz çağrılmadı. En iyi çözüm, bazı config tutucu örneklerini oluşturmak ve tüm fabrika sınıflarına enjekte etmektir. Bkz. Zend Framework 2, ServiceLocator sınıfı. Bu yaklaşımın dezavantajı, uygulamanızda çok daha fazla destek kodudur (ancak iyi yazarsanız, diğer projelerde tekrar kullanılabilir).
katma yazar Petr Jindra, kaynak
İkinci soru, benim tavsiyem, hazırlanan kütüphaneyi kullanarak PHP'ye kendiniz yazmamanız. Örneğin. gettext modülü. C/C ++ dilinde yazılmış PHP modülleridir ve PHP kodundan çok daha hızlı olacaktır (bkz. php.net/manual/en/function.gettext.php ). Getttext tanım dosyaları oluşturmak için Poedit'i kullanabilirsiniz: poedit.net
katma yazar Petr Jindra, kaynak
En iyi çözüm, singleton sınıflarından tamamen kaçınmaktır, fakat bunu yapmak için uygulamanızın temel mantığını yeniden yazmam gerekiyor. Bağımlılık enjeksiyonu hakkında bir şeyler okumaya çalışın.
katma yazar Petr Jindra, kaynak
merhaba, küresel değişkenleri kullanmaktan daha temiz bir çözüm. Genel değişkenler, genel kapsam dışında kalmak için çok tehlikelidir, çünkü bu genel değişkenlerdeki (ör. Kodunuzdaki yazım hatası) herhangi bir değişiklik, programınızın farklı bileşenlerinde beklenmeyen davranışlar yapabilir. Bununla orijinal yapılandırma verilerini uygulamanızın dışında tutursunuz.
katma yazar Petr Jindra, kaynak

Benim kişisel görüşüm bunun kötü bir fikir olduğu yönünde. Daha iyi bir çözüm, tüm uygulamanız boyunca yapılandırma sağlayan singleton sınıfı oluşturmaktır.

Bunun gibi bir şey:

class MyConfigProvider
{

    private $config = array();

    private static $instance = null;

    public static function getInstance()
    {
        if (self::$instance === null)
            self::$instance = new self();

        return self::$instance;
    }

    private function __construct(){}

    public function getConfig()
    {
        return $this->config;
    }

    public function setConfig(array $config)
    {
        $this->config = $config;
    }
}

Uygulamanızın tüm yerlerinde yapılandırmayı

$config = MyConfigProvier::getInstance()->getConfig();

En iyi çözüm değil, ancak uygulanması kolay ve işe yarıyor

1
katma
Ben de aynı dosya içerisine dahil edilmiş dosyadaki çoklu dil desteğini kullanıyorum ... like: "en.lang.php": $ _LANG ['PAGE_TITLE'] = 'İngilizce sayfa başlığı';
katma yazar itai, kaynak
merhaba, biraz kafam karıştı, en iyi çözüm AVOID singleton sınıflarına mı? kodlarım her zaman dağınıktır, ancak her gün onu geliştirmeye çalışıyorum ... yeni sitemde hala kullanıcı arayüzü stillendirme bölümündeyim ve sadece mantığa taşındım ... bu yüzden ayarlar bölümünü yapmamı nasıl önerirsiniz? mümkün olan en iyi yol?
katma yazar itai, kaynak
Bu sınıfı kullanmanın faydaları nelerdir, artı bunun en iyi çözüm olmadığını söylemiştiniz. En iyi çözüm nedir?
katma yazar itai, kaynak
merhaba, cevabınız için teşekkürler, lütfen index.php dosyasında ayar olarak bulunan bir ayarlar dizisinden sonra neden daha iyi olduğunu söyleyebilir misiniz? neden önemli? daha iyi anlamak istiyorum ...
katma yazar itai, kaynak
İlk soruya: singleton sınıflarının bir çirkin özelliği var: daha büyük bir projede bu singleton nesnesinin bir kısmını beklediğinizde durum olabilir (bu durumda yüklü config) ancak bu eylemden sorumlu mantık henüz çağrılmadı. En iyi çözüm, bazı config tutucu örneklerini oluşturmak ve tüm fabrika sınıflarına enjekte etmektir. Bkz. Zend Framework 2, ServiceLocator sınıfı. Bu yaklaşımın dezavantajı, uygulamanızda çok daha fazla destek kodudur (ancak iyi yazarsanız, diğer projelerde tekrar kullanılabilir).
katma yazar Petr Jindra, kaynak
İkinci soru, benim tavsiyem, hazırlanan kütüphaneyi kullanarak PHP'ye kendiniz yazmamanız. Örneğin. gettext modülü. C/C ++ dilinde yazılmış PHP modülleridir ve PHP kodundan çok daha hızlı olacaktır (bkz. php.net/manual/en/function.gettext.php ). Getttext tanım dosyaları oluşturmak için Poedit'i kullanabilirsiniz: poedit.net
katma yazar Petr Jindra, kaynak
En iyi çözüm, singleton sınıflarından tamamen kaçınmaktır, fakat bunu yapmak için uygulamanızın temel mantığını yeniden yazmam gerekiyor. Bağımlılık enjeksiyonu hakkında bir şeyler okumaya çalışın.
katma yazar Petr Jindra, kaynak
merhaba, küresel değişkenleri kullanmaktan daha temiz bir çözüm. Genel değişkenler, genel kapsam dışında kalmak için çok tehlikelidir, çünkü bu genel değişkenlerdeki (ör. Kodunuzdaki yazım hatası) herhangi bir değişiklik, programınızın farklı bileşenlerinde beklenmeyen davranışlar yapabilir. Bununla orijinal yapılandırma verilerini uygulamanızın dışında tutursunuz.
katma yazar Petr Jindra, kaynak