Tom: MEINUNG: Trigger für Variablen ermöglichen

Hello,

PHP hat einen integrierten OOP -Dialekt. Das ist schon mal gut.

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:

CallFunktionBefore    Eine Funktion, die beim Zugiff auf eine Variable vor der Veränderung
                      aufgerufen wird, sofern die Funktion existiert.
                      Die Veränderung ist vom Ergebnis der Funktion abhängig.

CallFunktionAfter     Eine Funktion, die nach der Veränderung von Variablen aufgerufen wird

Das wäre relativ leicht in PHP integrierbar, 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...

Mich würde nur mal Eure Meinung interssieren, bevor ich den Parser "auseinandernehme".

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
  1. 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

    1. Hello Philipp,

      das ist wirklich konstruktive Kritik.
      Ich werde da wohl noch eine Weile drüber nachdenken müssen, bis ich anfange zu frickeln... ;-))

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Halihallo Tom

        das ist wirklich konstruktive Kritik.

        Freut mich sehr!

        Ich werde da wohl noch eine Weile drüber nachdenken müssen, bis ich anfange zu frickeln... ;-))

        Sowohl darüber nachzudenken, wie auch daran zu frickeln macht
        Spass :-)
        Hast du vor dein eigenen PHP-Dialekt zu entwickeln? - C001!

        Viele Grüsse

        Philipp

        1. Hello,

          Ich werde da wohl noch eine Weile drüber nachdenken müssen, bis ich anfange zu frickeln... ;-))

          Sowohl darüber nachzudenken, wie auch daran zu frickeln macht
          Spass :-)
          Hast du vor dein eigenen PHP-Dialekt zu entwickeln? - C001!

          Naja, es gibt eben einige Denkansätze, wie man den Zugriff auf Daten weiter automatisiern kann.
          Das Zusammenspiel von Formular, Datei, Datenbank und Session könnte etwas Automatik gebrauchen.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau