Timbo: Overloading von Funktionen/Methoden

Hallo,

für eine Template Engine würde ich gerne innerhalb des Geltungsbereiches einer Methode Variablen überladen. Mit Eigenschaften von Klassen ist das ja möglich. Geht das auch innerhalb von Methoden? (__set() und __get() ist mir bekannt) Beispiel:

--

class Test
{
  public $test_variable = "abc";

function run()
  {
    require "template.php";
  }
}

-- template.php Inhalt:

<p><?=$test_variable?> soll den Wert von <?=$this->test_valiable?> zurückgeben. Also ohne "$this", weil kürzer.</p>

--

Grüße
Timbo

  1. echo $begrüßung;

    für eine Template Engine würde ich gerne innerhalb des Geltungsbereiches einer Methode Variablen überladen.

    Mich deucht, du willst eher Variablen aus Objekteigenschaften anlegen.

    <p><?=$test_variable?> soll den Wert von <?=$this->test_valiable?> zurückgeben. Also ohne "$this", weil kürzer.</p>

    Faulpelz! :-) Mehr Variablen machen ein System nur komplexer. Aufgrund von Bequemlichkeit finde ich das kein empfehlenswertes Vorgehen. Wie auch immer, du kannst die Eigenschaften eines Objekts als eigenständige Variablen im aktuellen Kontext anlegen lassen, wenn du der Funktion extract() das zum Array getypecastete Objekt übergibst.

    echo "$verabschiedung $name";

    1. Danke für den Hinweis. Mit dem Flag EXTR_REF sollte es aber auch ohne Performance-Verluste gehen.

      Komplexer wird es glaube ich nicht, weil der Zugriff in Templates einfacher wird und die Variablen-Anzahl gleich bleibt. Es gibt ja nur die Möglichkeit mit $this->test oder $test darauf zuzugreifen.

      1. echo $begrüßung;

        Mit dem Flag EXTR_REF sollte es aber auch ohne Performance-Verluste gehen.

        Du kannst das ja mal messen, aber zum einen wird es keinen großen Unterschied geben, zum anderen werden die Zeiten derart gering sein, dass mögliche Unterschiede praktisch bedeutungslos sind.

        PHP legt beim Zuweisen einer Variablen an eine andere zunächst keine Kopie des Wertes an. Erst wenn einer der beiden Werte geändert wird, wird eine echte Kopie erzeugt. Es gibt dazu einen Artikel, der PHPs internes Verhalten beschreibt: References Explained (by Derick Rethans). Ich nehme an, extract() verhält sich in dem Fall ebenso. Aus Performancegründen Referenzen verwenden zu wollen, bringt keine Punkte. Im Fazit (Conclusion) des Artikels wird es auch so empfohlen: Verwende Referenzen nur dann, wenn sie technisch notwendig sind.

        echo "$verabschiedung $name";