Tach!
ich hab versucht klassen konstanten dynamisch zur laufzeit zu erstellen, was leider Fehlgeschlagen ist 😕. Zur Frage: Kann man überhaupt das machen? Geht das? wenn nein: Alternative?
Der Wert einer Konstante muss zum Kompilierzeitpunkt feststehen. Es gibt aber statische Elemente (Keyword static), die einmalig an der Klasse sitzen statt an jedem Objekt einzeln und zur Laufzeit geändert werden können.
class Paths { private static $root; // hilfsvariable private function __() { // automatisches self::$root = dirname( _DIR__ ); } const ROOT = self::$root; }
Dein Konstrukt geht davon aus, dass der Code in der Reihenfoge der Notation ausgeführt. Das ist nicht der Fall.
Wenn du $root auf public umstellst und das CONST weglässt hast du dein Ziel erreicht. Soll $root aber unbedingt gegen Schreibzugriffe geschützt sein, dann lass es private und erstell eine public static
Zugriffsfunktion, die den Wert ausliest und zurückgibt.
Zur Arbeit: Ich habe das gesamte Verzeichnis des Frameworks gescant und dann in nem Array die Pfade gespeichert. Eine andere Klasse hat dann dieses Array genommen und daraus Konstanten mit
define()
erzeugt aber keine Klassenkonstanten :/.
Und dann? Woher weiß der Code nun, welche Konstanten definiert sind? Was sind das eigentlich für Pfade, die es da zur Laufzeit zu finden gilt?
Die Frameworks die ich mir angeschaut habe nutzen Composer und andere sehr statisch mit 'require'.
Composer ist kein Pfadverwaltung sondern eine Paketverwaltung, um Pakete von anderen in seiner Software zu verwenden. Dass diese Pakete irgendwie aufgerufen und deren Code inkludiert werden muss, ist auch klar, dazu braucht es einen Lademechanismus.
dedlfix.