Gibt es eine Möglichkeit, die Konstanten einer Klasse dynamisch zu erstellen? Ich weiß, dass dies ein wenig seltsam klingt, aber lassen Sie mich erklären, was ich versuche zu tun:Dynamische Konstanten in PHP?
- ich eine Enum-Klasse haben, wer Attribute definiert werden durch statische
const
Definitionen - Diese Klasse erweitert die PHP SplEnum Klasse
- Anstatt Typ in jeder dieser Definitionen in Code würde Ich mag eine statische haben initialiser in die Datenbank zu gehen und ziehen die aufgezählten Werte
Vielleicht wie dies irgendwas:
class myEnum extends SplEnum {
public static function init() {
$myNameValuePair = DB_Functions::get_enum_list();
foreach ($myNameValuePair as $name => $value) {
$const = array (self , $name);
$const = $value;
}
}
}
Ich weiß, dass dies nicht funktioniert, da es nicht CONST, sondern statische Variablen setzt. Vielleicht ist meine ganze Idee haarig und es gibt eine bessere Technik dafür. Wie auch immer, jede Methode, um das Endziel zu erreichen, wird sehr geschätzt.
UPDATE
ich denke, es könnte hilfreich sein, ein wenig mehr klar auf meine Ziele zu sein, weil ich ganz möglicherweise ist es denke, dass meine Verwendung von Konstanten nicht gut ist. Grundsätzlich möchte ich ist erreichen typisch für die Anforderungen der Aufzählungsliste:
Constrain Funktionssignaturen. Ich möchte in der Lage sein, nach einem "Satz" von Werten als Eingabe für eine Funktion zu fragen. Zum Beispiel:
public function do_something (ENUM_Types $ type) {}
Einfach und Compact. Erlauben Sie eine einfache und kompakte Syntax, wenn Sie im Code verwendet werden. Zum Beispiel bei der Verwendung von Konstanten, ich könnte eine bedingte Anweisung so etwas wie schreiben:
if ($ my_var === ENUM_Types :: TypeA) {}
Dynamische Aufzählung. Ich möchte, dass diese Aufzählung über das Frontend verwaltet und in der Datenbank gespeichert wird (ich benutze dafür die wordpress Admin-Bildschirme). Zur Laufzeit sollte diese "Liste" aus der DB herausgezogen und dem Code als Enumeration (oder ähnliche Struktur, die die oben genannten Ziele erreicht) zur Verfügung gestellt werden.
Per Definition ist eine Konstante nicht dynamisch sein kann. Warum nicht einfach statische Variablen verwenden? – Matt
Nun, ja, ich weiß und deshalb habe ich gesagt, es könnte ein bisschen seltsam erscheinen. Ich werde die Frage ein wenig auf den neuesten Stand bringen, um klarer zu machen, was ich erreichen möchte. – ken
Mit anderen Worten: Sie möchten keine dynamischen Konstanten, sondern dynamische Enums. – EthanB