Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] include in function variablen problem

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] include in function variablen problem

    Hallo Leute.

    ich habe ein Problem und weiß echt nicht woran es liegt ich hoffe ihr könnt mir den Fehler sagen.

    PHP-Code:
    <?

    function test() {
        include "includes/hosters.inc.php";
        global $hoster_array;
    }

    test();

    print_r($hoster_array);

    ?>
    In hosters.inc.php ist ein array ($hoster_array).
    Wenn ich diese Datei aufrufe bekomme ich keine Ausgabe.
    Wahrscheinlich bin ich blind oder was auch immer ich hoffe ihr könnt mir weiterhelfen.

    mfg
    BlackSpirit


  • #2
    Zitat von BlackSpirit Beitrag anzeigen
    In hosters.inc.php ist ein array ($hoster_array).
    Das anschliessend nur innerhalb der Funktion test gültig ist.

    Wenn ich diese Datei aufrufe bekomme ich keine Ausgabe.
    Dann stelle das error_reporting vernünftig ein, auf E_ALL.

    Und anschliessend gehe im Manual nachlesen, wie man das Schlüsselwort global richtig verwendet. Noch besser, verzichte auf globale Variablen.

    Kommentar


    • #3
      PHP-Code:
      $GLOBALS['hoster_array'] = 'foo';

      function 
      test() {
          include 
      "./hosters.inc.php";
          
      var_dump($hoster_array); // Gibt Array aus

          
      global $hoster_array;    // $hoster_array := $GLOBALS['hoster_array'],
                                   //   überschreibt die lokale Variable $hoster_array
          
      var_dump($hoster_array); // Gibt 'foo' aus

      Wenn du die global- und include-Zeilen vertauschst, geht es.

      Die elegantere Variante sähe so aus:

      PHP-Code:
      function test() {
          include 
      "./hosters.inc.php";
          return 
      $hoster_array;
      }

      $hosters test();

      print_r($hosters); 
      PHP-Wissenssammlung Composer Awesome Awesomeness PHP: The Right Way @mermshaus

      Kommentar


      • #4
        @ChrisB
        Zitat von ChrisB Beitrag anzeigen
        Das anschliessend nur innerhalb der Funktion test gültig ist.
        Ja deswegen verwende ich global.
        Zitat von ChrisB Beitrag anzeigen
        Dann stelle das error_reporting vernünftig ein, auf E_ALL.
        Ist bei mir immer auf E_all
        Zitat von ChrisB Beitrag anzeigen
        Und anschliessend gehe im Manual nachlesen, wie man das Schlüsselwort global richtig verwendet.
        Habe ich bereits und leider nicht gefunden deswegen Frage ich hier im Forum.
        Zitat von ChrisB Beitrag anzeigen
        Noch besser, verzichte auf globale Variablen.
        Geht leider nicht.

        @mermshaus

        Hallo danke für deine Lösung funktioniert wunderbar

        Kommentar


        • #5
          Zitat von BlackSpirit Beitrag anzeigen
          [error_reporting] Ist bei mir immer auf E_all
          Dann muss die Aussage, dass du „keine Ausgabe“ bekommst, gelogen sein.

          (Oder du hast display_errors auf off, was beim Entwickeln aber auch blöd wäre.)


          Zitat von ChrisB
          Noch besser, verzichte auf globale Variablen.
          Geht leider nicht.
          Das darf wohl erst mal pauschal bezweifelt werden.

          Kommentar


          • #6
            Die elegantere Variante sähe so aus:

            PHP-Code:
            function test() {
                include 
            "./hosters.inc.php";
                return 
            $hoster_array;
            }

            $hosters test();

            print_r($hosters); 
            Abhängigkeiten in einer Funktion (hier: von der Existenz einer Ressource und einem entspr. Setting darin und einem impliziten Pfad) sollten verhindert werden.

            Für mich so:

            PHP-Code:
            include "./hosters.inc.php";
            // im Include:
            // $hoster_array = whatever;

            function test($hosters) {
                
            // do smthng with $hosters
                // ..
                
            return $hosters;
            }

            if (
            $hoster_array) {
              
            $hosters test((array) $hoster_array);
            }
            else {
              
            $hosters = array ();
            }

            print_r ($hosters); 
            .
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar

            Lädt...
            X