Philipp Hasenfratz: MEINUNG: Trigger für Variablen ermöglichen

Beitrag lesen

Halihallo Tom

Nun kam mir in den Sinn, dass es ein sehr nützliche Sache wäre, wenn man intern der Variablentabelle noch zwei Möglichkeiten beibrignen könnte:

Hm. Ja und nein. Obgleich dies sicher einige Vorteile bieten kann, so
ist es doch eine weitere Komplexität die hinzukommt, die der Les- und
Wartbarkeit des Codes alles andere als behilflich ist. Es wäre ein
klarer Vorteil, wenn die Aufgabenstellungen die dieses Feature
benötigen würden nicht auch anders umgesetzt werden könnten, aber das
ist ja nicht der Fall => der Vorteil einer derartigen Erweiterung
halte ich zwar für gegeben, aber ich sehe ihn auch mit grossen
Nachteilen verbunden.

CallFunktionBefore
CallFunktionAfter
Das wäre relativ leicht in PHP integrierbar

Sicher? Ich versuche mal einige Probleme die ich sehe zu behandeln:

Rekursion:
  Beispiel:
    $t='some value';
    CallFunktionBefore("lets_change_t();",&$t)
    function lets_change_t() {
        if ($t=='reserved value') { die('reserved string!'); }
    }
  Nun, dies endet in einer Rekursion, die entweder PHP selber, oder
  der Programmierer verhindern muss. Für beide ist es nicht immer
  einfach... Auf Seiten PHP müsste man entweder ausschliessen, dass
  auf die Variable zugegriffen werden darf; oder man müsste eine neue
  Art von Funktion einführen, in der keine CallFunktionBefore|-After
  Callbacks mehr ausgeführt werden.

Scope:
  Falls eine Variable gleichen Namens sowohl global, wie auch lokal
  definiert ist, wird es sehr unübersichtlich. Man muss ein klares
  Bild davon haben, welcher Callback (CallFunktionBefore|-After) nun
  ausgeführt wird und ob überhaupt.

Zuweisung neuer Werte:
  Falls bei einem CallFunktionBefore oder -After der Wert der
  Variablen verändert wird, wird es dem Programmierer schier
  unmöglich sein, dass Programm sinnvoll zu debugen bzw. Fehler zu
  finden.

Komplexe Datentypen:
  Wie verhält sich dein PHP-Script-Interpreter, falls ein
  CallFunktionBefore auf ein komplexer Datentyp (Referenz auf
  ein Array z.B.) definiert ist und auf ein Unterelement zugegriffen
  wird? (genaugenommen ist das implizit ein Zugriff auf die Variable
  selber)

Performance...?

und würde bisher ungeahnte Möglichkeiten für PHP als Schnittstelle zu Datenbanken und zum Browser (Formulare) ermöglichen. Natürlich müsste die Funktion get_defined_vars() durch die beiden Spalten ergänzt werden und es müsste ien Funktion Set_Function() und delete_function() geben...

Ich denke, dass es noch einige technische Schwierigkeiten zu lösen
gibt, die anderer Natur sind. Z.B. das genannte Problem der
Rekursion, oder das der komplexen Objekte.

Als Fazit meinerseits: Ich verzichte gerne auf dieses Feature, denn
jede Aufgabenstellung lässt sich mit herkömmlichen Methoden auch
umsetzen und dies ohne die Les- und Wartbarkeit zu verringern. Auch
wenn es mich etwas mehr Tipparbeit kosten würde (was ich mal unbelegt
im Raum stehen lasse). Andererseits muss ich sagen: wenn es Vorteile
beiten kann (was ich nicht bestreite), warum soll "PHP" es nicht
anbieten? - Es ist ja die Entscheidung des Programmierers, ob er es
zur Anwendung kommen lässt, oder nicht.

BTW: Perl kennt das overload Pragma, mitdem man bereits ein
CallFunktionBefore implementiert werden kann. Hoch lebe Perl wieder
einmal :-)

Viele Grüsse

Philipp