PHP is cool :): include()

Hallo,

ich habe ein Projekt, das aus 3 Dateien aufgebaut ist. Datei main.php bindet beide anderen Dateien ein. Erst Datei a.php und dann b.php. In Datei a.php ist die Funktion CloseInfoBox() hinterlegt, welche ich mit b.php ansprechen will. Ich hatte gehofft, dass ich die mit b.php aufrufen kann, da beide ja in main.php eingebunden sind, leider geht es nicht. Errors werden nicht geloggt (trott E_ALL). Es wird ganz einfach die Funktion CloseInfoBox() nicht ausgeführt. Kann mir da jemand weiterhelfen, wie ich das beheben kann?

  1. Hallo,

    (...) Es wird ganz einfach die Funktion CloseInfoBox() nicht ausgeführt. Kann mir da jemand weiterhelfen, wie ich das beheben kann?

    Prüfe mal mit einer Ausgabe in jeder Datei, ob diese auch korrekt eingebunden werden. Also zum Beispiel in der a.php echo 'a.php';.

    Des Weiteren kannst du in jeder Datei prüfen, ob die Funktion an der Stelle schon zu Verfügung steht. (Die Reihenfolge in der du die Datein einbindest kann von Bedeutung sein.)

    <?php  
    if (function_exists('CloseInfoBox')) {  
        echo 'Funktion CloseInfoBox ist verfügbar.';  
    } else {  
        echo 'Funktion CloseInfoBox ist nicht verfügbar.';  
    }  
    ?>
    

    Schreib mal deine Ergebnisse.

    Viele Grüße Novi

    --
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)
  2. Hi!

    ich habe ein Projekt, das aus 3 Dateien aufgebaut ist. Datei main.php bindet beide anderen Dateien ein. Erst Datei a.php und dann b.php. In Datei a.php ist die Funktion CloseInfoBox() hinterlegt, welche ich mit b.php ansprechen will. Ich hatte gehofft, dass ich die mit b.php aufrufen kann, da beide ja in main.php eingebunden sind, leider geht es nicht.

    Doch, das geht.

    Errors werden nicht geloggt (trott E_ALL).

    display_errors ist auch an und beides schon vor dem Scriptstart aktiv oder spätestens vor den Includes?

    Es wird ganz einfach die Funktion CloseInfoBox() nicht ausgeführt.

    Wie stellst du das genau fest?

    Kann mir da jemand weiterhelfen, wie ich das beheben kann?

    Indem du den Fehler behebst. Gemäß deiner Beschreibung kann ich kein generelles Problem nachvollziehen.

    Lo!

  3. Für mich klingt das als würde b.php eine Funktion aus a.php aufrufen, aber a.php ist nur im Main includet. Das ist dem Script b aber ja egal. Damit b die Funktion aus a kennt, muss man a bei b bekannt machen. Es sollte also ein include(a.php) in das Script b rein.

    1. Hallo,

      Für mich klingt das als würde b.php eine Funktion aus a.php aufrufen, aber a.php ist nur im Main includet. Das ist dem Script b aber ja egal. Damit b die Funktion aus a kennt, muss man a bei b bekannt machen. Es sollte also ein include(a.php) in das Script b rein.

      ich bin mir ziemlich sicher, dass das in php nicht erforderlich ist. Damit b die Funktion aus a kennt, muss in Main nur a vor b eingebunden werden.

      Viele Grüße Novi

      --
      "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)
      1. Ok das wusste ich noch gar nicht. Ich hab das dann wohl einfach so verstanden.
        Dann ignoriere man meinen Beitrag bitte.

      2. Hello,

        ich bin mir ziemlich sicher, dass das in php nicht erforderlich ist. Damit b die Funktion aus a kennt, muss in Main nur a vor b eingebunden werden.

        Noch nicht einmal das!

        Die Reihenfolge der Includes ist vollkommen irrelevant.
        PHP ist ein Interpreter, der zuerst die deklaratorische Arbeit erledigt, also alle Deklarationen einliest und die dabei gefundenen Funktionen registriert und erst dann den operativen Teil startet, also die Funktionen auch aufruft...

        Du kannst also Dein "Main" vor der Deklaration (und Definition) der Funktionen stehen haben.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

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

          Noch nicht einmal das!

          Die Reihenfolge der Includes ist vollkommen irrelevant.
          PHP ist ein Interpreter, der zuerst die deklaratorische Arbeit erledigt, also alle Deklarationen einliest und die dabei gefundenen Funktionen registriert und erst dann den operativen Teil startet, also die Funktionen auch aufruft...

          Du kannst also Dein "Main" vor der Deklaration (und Definition) der Funktionen stehen haben.

          Also die Reihenfolge der includes ist schon wichtig:

          a.php

          <?php  
          function test() {  
              echo 'test';  
          }  
          ?>
          

          b.php

          <?php  
          test();  
          ?>
          

          Folgendes geht:

          main.php

          <?php  
          include 'a.php';  
          include 'b.php';  
          ?>
          

          Dies löst folgende Fehlermeldung aus:
          Fatal error: Call to undefined function test() in b.php on line 2

          main.php

          <?php  
          include 'b.php';  
          include 'a.php';  
          ?>
          

          PHP erlaubt ja auch includes inerhalb von Funktionen und unter bestimmten Bedingungen. Es ist also gar nicht immer möglich für den Interpreter alle Funktionen voher zu erfassen.

          Für eine Datei trifft deine Aussage jedoch durchaus zu:

          <?php
          test();
          function test() {
              echo 'test';
          }
          ?>

          Dieses Beispiel geht also wieder ohne Probleme, da PHP "zuerst die deklaratorische Arbeit erledigt".

          Viele Grüße Novi

          --
          "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)
          1. Hello,

            Für eine Datei trifft deine Aussage jedoch durchaus zu:

            <?php
            test();
            function test() {
                echo 'test';
            }
            ?>

            Dieses Beispiel geht also wieder ohne Probleme, da PHP "zuerst die deklaratorische Arbeit erledigt".

            Gut aufgepasst. Danke!

            Ich bin ohnehin gegen Spaghetti- und Müllhaufencode, aber ausprobiert haben sollte das jeder PHP-Programmierer mindestens einmal...

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

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