Timo: Error Parsing ändern

Hi,

das ist eher eine Frage aus Neugierde nicht aus Notwendigkeit.

PHP parst ja jedes Dokument komplett. Das bedeutet, auch wenn ich ein aufwendiges Script habe mit unzähligen Funktionen die nur selten und bei bestimmten Ereignissen ausgelöst werden, parst php komplett. Genauso mit den vielleicht unzähligen Includefiles und deren Inhalt, was zb. Variabelndefinierungen sind.

Ist das eigentlich sinnvoll?

Kann man das irgendwie auch abschalten?

Ich kann mir vorstellen, dass ein Script was zwar ein paar tausend Zeilen mitbringt, aber je nach Aufgabe nur 100 zeilen nutzt, doch wesentlich effizienter arbeiten müsste, wenn PHP nicht alles vorher prüfen würde un dalle auch nicht benötigten Variabeln in den Speicher packt, oder sehe ich das falsch?

Timo

  1. PHP parst ja jedes Dokument komplett. Das bedeutet, auch wenn ich ein aufwendiges Script habe mit unzähligen Funktionen die nur selten und bei bestimmten Ereignissen ausgelöst werden, parst php komplett. Genauso mit den vielleicht unzähligen Includefiles und deren Inhalt, was zb. Variabelndefinierungen sind.

    Ist das eigentlich sinnvoll?

    Das ist nicht nur sinnvoll, sondern muss so sein, weil du in PHP jedes Element benutzen kannst, bevor es deklariert wurde. Folgender Code funktioniert beispielsweise:

    10 eins();
    20
    30 function eins() {
    40   echo "eins";
    50 }

    Die Funktion eins() wird in Zeile 10 aufgerufen, noch bevor der Funktionskörper in Zeile 30 erscheint. Das ist nur möglich, weil der Interpreter zuerst den kompletten Code einliest und erst im Anschluss mit der Ausführung beginnt.

    Ob dieses Verhalten nun sonderlich schlau ist, lassen wir mal dahingestellt (nur soviel: es kann gute Gründe haben, nicht umsonst gibt es bei anderen Sprachen sogenannte Vorwärtsdeklarationen), weil PHP sowieso in keinster Weise ein Beispiel für eine durchdachte Programmiersprache darstellt, sondern ganz im Gegenteil in vielfacher Hinsicht zeigt, wie man es auf keinen Fall machen sollte.

    Ich kann mir vorstellen, dass ein Script was zwar ein paar tausend Zeilen mitbringt, aber je nach Aufgabe nur 100 zeilen nutzt, doch wesentlich effizienter arbeiten müsste, wenn PHP nicht alles vorher prüfen würde un dalle auch nicht benötigten Variabeln in den Speicher packt, oder sehe ich das falsch?

    Nein, das siehst du vollkommen richtig. Der Optimierungsansatz wäre hier die Frage, warum ein Skript mehrere Tausend Zeilen aufweisen muss, obwohl es je Aufruf nur ein Zehntel davon nutzt.

    1. Hello,

      Ist das eigentlich sinnvoll?

      Das ist nicht nur sinnvoll, sondern muss so sein, weil du in PHP jedes Element benutzen kannst, bevor es deklariert wurde. Folgender Code funktioniert beispielsweise:

      10 eins();
      20
      30 function eins() {
      40   echo "eins";
      50 }

      Die Funktion eins() wird in Zeile 10 aufgerufen, noch bevor der Funktionskörper in Zeile 30 erscheint. Das ist nur möglich, weil der Interpreter zuerst den kompletten Code einliest und erst im Anschluss mit der Ausführung beginnt.

      Der Code wird aber noch nicht fertig interpretiert, sondern es werden im Prinzip nur die Bezeichner eingesammelt und eine (passende) Referenz dafür angelegt.

      Bedingte includes werden erst dann durchgeführt, wenn die Bedingung zutrifft. Anschließend werden sie genauso mit einem erten Durchlauf auf Bezeichner durchsucht. Auch die vollständige Interpretation eines Includes findet erst statt, wenn die darin enthaltenen Funktionen benutzt werden.

      Wie das genau funktioniert, wird hier sicherlich jemand erklären können. Auf jeden Fall kann man aber den zu ladenden und durchzuarbeitenden Quellcode dadurch kurz halten, indem man in sinnvolle Module (includes) aufteilt, die erst dann angefordert werden, wenn sie auch benötigt werden.

      Eine sinnvolle Methode erscheint mir dafür zu sein, für seine Seiten ein Framework von außen nach innen aufzubauen. Die in der Rahemnseite darzustellenden Formulare werden samt ihrer eigenen Logik (was passiert bei welchem Submit?) in Includes ausgelagert. Die übergeordnete Logik entscheidet, welches Modul für diesen Request benötigt wird und beschafft es.

      Liebe Grüße aus Syburg

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de