PHP OOP properity sabit kullanımı

3 Cevap php

Ben OOP gerçekten yeniyim. Ben bile bir acemi değilim - Ben noob ben. Yani. Ben OOP programlama sistemi içine, "normal" programlama benim sözde CMS aktarmak istiyorum. Ve böylece:

private static $dsn = DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME;

Burada ne bir soruna neden olur? Kısıtlamaları kullanımı? Bilmiyorum. Benim editörü (aptana stüdyo) 1 sabiti sonra hata gösterir. Teşekkürler

Edit:

Hızlı reaksiyon için teşekkürler. Ben contructor bunu yapacağım.

Edit2:

Ama ne ben Singleton kullanmak isterseniz? Nasıl contructor argüman geçmek?

3 Cevap

Bkz documentation:

Bu beyan, bir başlatma içerebilir, fakat bu başlatma sabit bir değer olmalıdır - yani, bu derleme zamanında değerlendirilmesi gerekir ve değerlendirilmesi amacıyla çalışma zamanı bilgileri bağlı olmamalıdır.

Sınıf özelliklerini tanımlarken dizeleri birleştirmek olamaz.

(Tamlık için) belgelerine Örnek:

<?php
class SimpleClass
{
   // invalid property declarations:
   public $var1 = 'hello ' . 'world';
   public $var2 = <<<EOD
hello world
EOD;
   public $var3 = 1+2;
   public $var4 = self::myStaticMethod();
   public $var5 = $myVar;

   // valid property declarations:
   public $var6 = myConstant;
   public $var7 = array(true, false);

   // This is allowed only in PHP 5.3.0 and later.
   public $var8 = <<<'EOD'
hello world
EOD;
}

?>

Yine de OOP geçmek gibi sabitleri kullanmanız gerekir. Lütfen sınıfının kurucusuna bu değerleri Pass:

public function __construct($db_type, $db_host, $db_name) {
    self::$dsn = $db_type.':host='.$db_host.';dbname='.$db_name;
}

Tüm değişken bildirimleri tamamen durağan olması gerekir. Bu sabitler, değişkenler veya diğer değiştirilebilir öğeleri kullanmak anlamına gelir.

Tamamen düz bir metin değil bir şey yapmak için, kurucu kullanmalısınız.

Sorun özelliklerini başlatıcı alanlar bunları koyduğunuzda inline sabit olmak zorunda olmasıdır.

Ne yapıyoruz çalışır, ancak bu, örneğin, olur olmaz:

private static $dsn = 'mysql:host=localhost;dbname=mydb';

Ben aptalca, biliyorum, ama sen bile PHP sabitleri kullanamazsınız. Kelimenin tam anlamıyla düz metin içinde olması gerekir.

Bunun çözümü bu gibi $dsn sınıfının yapıcı başlatılamıyor için:

class MyClass
{
    public function __construct()
    {
        self:: $dsn = DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME;
    }
}