PHP Lehrling: Funktionsaufruf vor der Funktion?

Hallo.

Wenn ich den Funktionsaufruf innerhalb einer php-Datei vor die eigentliche Funktion schreibe, geht alles gut. Warum? Weil die php-Datei erst komplett im Parser umgesetzt wird und so die Funktion bekannt ist?

  1. Hallo,

    Wenn ich den Funktionsaufruf innerhalb einer php-Datei vor die eigentliche Funktion schreibe, geht alles gut. Warum?

    Weil dein Skript zufällig keine Fehler enthält?

    Mal im Ernst: Was ist die Frage? Warum es nicht gut geht, wenn du den Funktionsaufruf nicht davor schreibst, sondern gar nicht? Ein Beispiel wäre schön ...

    Weil die php-Datei erst komplett im Parser umgesetzt wird und so die Funktion bekannt ist?

    Ja, der PHP Code muss erst geparst werden, damit er übersetzt (kompiliert) werden kann, damit er schließlich ausgeführbar ist.

    Grüße

    1. Hi,

      Weil die php-Datei erst komplett im Parser umgesetzt wird und so die Funktion bekannt ist?
      Ja, der PHP Code muss erst geparst werden, damit er übersetzt (kompiliert) werden kann, damit er schließlich ausgeführbar ist.

      so ist es - und deshalb ist es auch egal, ob der Funktionsaufruf im Code *vor* oder *nach* der Definition der Funktion kommt. Das ist übrigens nicht bei allen Programmiersprachen so.

      Ciao,
       Martin

      --
      Kleine Geschenke erhalten die Freundschaft.
      Große verderben sie aber meist auch nicht.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. so ist es - und deshalb ist es auch egal, ob der Funktionsaufruf im Code *vor* oder *nach* der Definition der Funktion kommt. Das ist übrigens nicht bei allen Programmiersprachen so.

        Danke!
        Ich könnt' das natürlich testen aber vielleicht hast du die Antwort ja auch schon parat: bezieht sich das auch auf include-Dateien? Und wenn ja, meldet der Parser einen Fehler wenn die Funktion gar nicht vorhanden ist (das include z.B. nicht funktionierte?)

        1. Hallo,

          Ich könnt' das natürlich testen aber

          Kein Aber! Du solltest das testen, um es zu verstehen. Wenn du dann Schwierigkeiten hast, wird dir sicherlich geholfen, wenn du eine Frage hast.

          vielleicht hast du die Antwort ja auch schon parat: bezieht sich das auch auf include-Dateien?

          Probiere es aus.

          Und wenn ja, meldet der Parser einen Fehler wenn die Funktion gar nicht vorhanden ist (das include z.B. nicht funktionierte?)

          Auch das lässt sich innerhalb weniger Sekunden selbst herausfinden und man lernt auch etwas dabei.

          Hier noch eine Leseempfehlung: http://us.php.net/manual/en/function.include.php

          Grüße

        2. Hello,

          Ich könnt' das natürlich testen

          Welche Fragen wären zu klären?
          Dau fällt mir z.B. ein:

          • wann findet die Deklaration eines Symbols und wann die Definition des zugehörigen Körpers statt?
          • wann wird die Symboltabelle erzeugt?
          • wann fällt das Fehlen eines Symbols auf?

          Wie könnte man das testen? Welche Tests wären denn interessant?

          Da fiele mir z.B. ein, mal eine Funktion doppelt zu deklarieren (und vielelicht auch zu definieren), also bewusst Fehler zu provozieren. Was passiert, wenn man die Funktion erst deklariert, dann über ein include nochmal deklariert? Was passiert, wenn man sie erst übr ein include deklariert und dann im Script nochmal? Was passiert bei bedingten includes? Was passiert bei bedingten Deklarationen?

          Und was kann man nun für Lehren daraus ziehen für den Aufbau seiner Scripte für größere Projekte?

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
        3. Hello,

          so ganz am Rande möcht ich Dich noch auf einen Artikel hinweisen zum Thema Variablen in PHP

          http://code.stephenmorley.org/php/references-tutorial/

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
      2. @@Der Martin:

        nuqneH

        so ist es - und deshalb ist es auch egal, ob der Funktionsaufruf im Code *vor* oder *nach* der Definition der Funktion kommt. Das ist übrigens nicht bei allen Programmiersprachen so.

        In JavaScript macht es einen Unterschied, _wie_ die Funktion definiert wird:

        f1(); // funzt.  
        function f1() { alert('f1() called.'); }
        
        f2(); // funzt nicht.  
        var f2 = function () { alert('f2() called.'); }
        
        var f3 = function () { alert('f3() called.'); }  
        f3(); // funzt.
        

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Hallo Gunnar,

          In JavaScript macht es einen Unterschied, _wie_ die Funktion definiert wird:

          f2(); // funzt nicht.

          var f2 = function () { alert('f2() called.'); }

            
          daran hatte ich noch gar nicht gedacht - aber es ist eigentlich logisch, weil erst durch die Ausführung der zweiten Zeile die Variable f2 mit einem Funktions-Objekt initialisiert wird.  
            
          Ciao,  
           Martin  
          
          -- 
          Wenn man keine Ahnung hat - einfach mal Fresse halten.  
            (Dieter Nuhr, deutscher Kabarettist)  
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(