2010-10-28 14 views
13

factory desenini uygulamak için bunları kullanırdım, örneğin:PHP - neden statik const değişkeni bildiremedim?

class Types{ 
    static const car = "CarClass"; 
    static const tree = "TreeClass"; 
    static const cat = "CatClass"; 
    static const deathstar = "DeathStarClass"; 
} 

Ve bunları kullanmak istiyorum:

$x = new Types::car; 

Bu mümkün mü?

Peki ya sınıfımın yapısında parametr varsa, bu işe yaramıyor:

$x = new Types::car(123); 
+3

Dinamik sabitin aksine statik sabit mi? :) –

+0

Check düzenleme plz;) –

+0

@John Hala sizin örneklerinizi anlamıyorum. Neden aynı sabiti dört kez açıklıyorsun? Beklenen sonuç ne olurdu? Bu gibi const 'anahtar sözcüğü çalışmalıdır, sadece 'statik' bırakın. Bir sabit için mantıklı değil. –

cevap

21

Kodunuz olmalıdır:

class Types{ 
    const car = "CarClass"; 
    const tree = "TreeClass"; 
    const cat = "CatClass"; 
    const deathstar = "DeathStarClass"; 
} 

sabitleri sınıf tanımına bağlıdır beri Not olduğunu, Tanım olarak statiktirler. Dokümanlar itibaren

:

PHP 5.3.0 itibariyle, referans için bir değişken kullanarak sınıf mümkündür. Değişkenin değeri, bir anahtar sözcüğü (ör. Kendi kendine, üst ve statik) olamaz.

http://www.php.net/manual/en/language.oop5.static.php

Fazla Bilgi:

http://php.net/manual/en/language.oop5.constants.php

+0

OOO, tam olarak! Bunu başarmak istiyorum! Ama ya sınıfım construcotr'da varsa? Bunu yapamam gibi: '$ x = yeni Türler :: araba (123);' ...:( –

+3

@John: Sabit bir değeri ilk önce bir değişkene atayarak bir değişken sınıfını örnekleyin: '$ type = Types :: car; $ x = yeni $ type (123);' – BoltClock

+0

Ekleyeceğim tek şey bu adlandırmadır. sabitler sözleşmesi tüm kapaklar – Ice76

1

Bu bir sabit var. Bunu değiştiremezsin. Yani, statik olmayan sabit bir üyeye sahip olmanızın hiçbir anlamı yoktur. Yani bunları statik veya sınıf değişkenleri olarak bildirmeniz gerekmez.

4

Sabitler, bir sınıf örneğine bağlı olmadıkları için zaten statik. Bunları tanımlamak ve bunları istediğiniz gibi kullanmak için:

class Types{ 
    const car = "CarClass"; 
    const tree = "TreeClass"; 
    const cat = "CatClass"; 
    const deathstar = "DeathStarClass"; 
} 

$x = Types::car; 
+0

'tür' araba 'demek istiyorsun. Bunun dışında, +1 –