2010-10-28 9 views
13

Ich würde sie verwenden factory Muster zu implementieren, zum Beispiel:PHP - warum konnte ich statische const Variable nicht deklarieren?

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

Und ich möchte sie wie verwenden:

$x = new Types::car; 

Ist es möglich?

Und was, wenn meine Klasse in construcor parametr hat, das funktioniert nicht:

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

Sie meinen, eine statische Konstante im Gegensatz zu einer dynamischen Konstante? :) –

+0

check edit plz;) –

+0

@John Ich verstehe dein Beispiel immer noch nicht. Warum deklarieren Sie die gleiche Konstante vier Mal? Was wäre das erwartete Ergebnis? Das 'const'-Schlüsselwort als solches sollte funktionieren, lassen Sie das' static' einfach weg. Es macht keinen Sinn für eine Konstante. –

Antwort

21

sollte Ihr Code sein:

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

Beachten Sie, dass seit Konstanten sind auf die Klassendefinition gebunden, Sie sind per Definition statisch.

Von Docs:

Ab PHP 5.3.0 ist es möglich, zu Referenz die Klasse eine Variable. Der Wert der Variablen darf kein Schlüsselwort sein (z. B. self, parent und static).

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

Mehr Info:

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

+0

OOO, genau! Das würde ich gerne erreichen! Aber was ist, wenn meine Klasse Konstrukt hat? Ich kann es nicht tun wie: '$ x = neue Typen :: Auto (123);' ...:( –

+3

@John: Instantiiere eine Variablenklasse, indem du einer Variablen zuerst den konstanten Wert zuordnest: '$ type = Types :: car; $ x = new $ type (123);' – BoltClock

+0

Das einzige, was ich hinzufügen würde, ist die Benennung Konvention für Konstanten ist alle caps – Ice76

1

Es ist eine Konstante. Du kannst es nicht ändern. Es macht also keinen Sinn, dass Sie ein nicht statisches konstantes Mitglied haben. Sie müssen sie also nicht als statische oder Klassenvariablen deklarieren.

4

Konstanten sind bereits in dem Sinne statisch, dass sie nicht an eine Instanz der Klasse gebunden sind. Hier ist, wie Sie sie definieren und verwenden sie wie Sie wollen:

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

$x = Types::car; 
+0

Sie meinen 'Types: Auto'. Ansonsten, +1 –

Verwandte Themen