dedlfix: Klassen Konstanten zu laufzeit definieren?

Beitrag lesen

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.