dedlfix: Klassen Konstanten zu laufzeit definieren?

Beitrag lesen

Tach!

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.

Sprichst du über Properties wie Constanten oder Methoden? Wenn du über Properties redest dann gib mir n Beispiel damit ich das nachvollziehen kann.

Ich spreche über Zugriffsmodifizierer (public/private) und das Keyword static. Mit static kann man Mitglieder (Eigenschaften und Methoden) an die Klasse binden statt dass sie in jeder einzelnen Instanz separat leben. Statt Klassenkonstanten, die zum Kompilierzeitpunkt feststehen müssen, kannst du eine statische Property nehmen, die du zur Laufzeit befüllen kannst. Allerdings ist diese im Gegensatz zu Klassenkonstanten änderbar. Deswegen als private verstecken. Damit kann man sie zwar immer noch innerhalb der Klasse und deren Instanzen ändern, aber immerhin nicht mehr von überall her, wie das bei public der Fall wäre.

class Foo {
  private static $bar;

  public static GetBar() {
    return self::$bar;
  }
}

Wenn $bar ein skalarer Wert oder ein Array ist, dann bekommst du eine Kopie von GetBar(). Da Objekte aber ohne clone als Referenz übegeben werden, würde der originale Inhalt geändert werden können.

Und dann? Woher weiß der Code nun, welche Konstanten definiert sind?

Ich kann get_defined_constants() verwenden, was aber dann alle konstanten betrifft auch die, die nich für Pfade stehen.

Eben, schon wird's Mist. Dann lieber ein Array, in dem nur die gefragten Daten stehen und nicht noch nebenbei etwas anderes dazukommen kann.

So muss der Autoloader nicht ständig Pfade ändern und dann prüfen (z.B. $controller = ROOT .DS .APP .CONTROLLER .DS . $controller .'.php';) sonder einfach über eine foreach()-Schleife laufen bis er die sache findet oder nicht

Das Zusammenbauen des Pfades aus einer gleichbleibenden Anzahl von Einzelteilen ist immer gleich teuer. Das Iterieren über ein Array wird mit zunehmender Größe teurer, besonders wenn der Eintrag weit hinten steht. Was aber im Vergleich zur anderen Methode günstiger ist, müssen Messungen zeigen.

Wenn du dir das aus Optimierungsgründen überlegt hast, dann vergiss diese Überlegung, solange du nicht durch Messungen ihre Richtigkeit bestätigt hast.

dedlfix.