Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] "return" Frage

Einklappen

Neue Werbung 2019

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

  • [Erledigt] "return" Frage

    Hi,

    ich hab mir ein Script zusammengebaut, was eine XML Abfrage an mein Domain-Provider sendet.

    Das klappt auch soweit. Zum Anfang sollte der einfachhalt halber der Rückgabewert direkt im Browser angezeigt werden, was nach einigem rumbauen dann auch klappte.

    Nun würde ich den Output gern weiterverarbeiten wollen und den Output nicht mehr am Bildschirm sondern in ein array speichern.
    Leider gelingt mir beides nicht. (Bildschirm aus // array füllen)

    Hier erstmal das "Bildschirm-Output" Script.
    PHP-Code:
    <?php
    define
    'HOST''https://schnittstellen-domain.tld' );
    define'XML_FILE''request.xml' );
    $xml implodefile(XML_FILE) );
    header'Content-Type: text/xml' );
    echo 
    requestCurl$xml );
    function 
    requestCurl$data ) {
    $ch curl_initHOST );
    curl_setopt $chCURLOPT_POSTFIELDS$data );
    curl_setopt $chCURLOPT_RETURNTRANSFER);
    curl_setopt $chCURLOPT_SSL_VERIFYPEERFALSE );
    if( !
    $data curl_exec$ch )) {
    echo 
    'Curl execution error.'curl_error$ch ) ."\n";
    return 
    FALSE;
    }
    curl_close$ch );
    return 
    $data;
    }
    ?>
    Nun dachte ich, ich mach oben ein array auf:
    $data = array();
    return $data füllt dann dieses erstellte array... und mittels:
    var_dump($data);
    lasse ich es mir wieder am Bildschirm ausgeben.

    Leider bleibt das array leer... und die Ausgabe erfolgt immer noch am Bildschirm (Ausgabe kommt nicht vom var_dump)

    So: jetzt erstmal die Verständnissfrage, da ich ja anscheind an der falsche Stelle ansetzte.

    mit return $data; beende ich zum einen den vorherigen Anweisungsblock und übergebe zum 2ten die ermittelten Werte an die Variable $data.

    Wenn das korrekt ist, dann müsste mein Vorgehen doch eigentlich korrekt sein. (?)

  • #2
    Zitat von lord_icon Beitrag anzeigen
    mit return $data; beende ich zum einen den vorherigen Anweisungsblock und übergebe zum 2ten die ermittelten Werte an die Variable $data.
    return beendet den aktuellen Ausführungsstrang und kehrt zum Aufrufer zurück. Technisch gesehen läuft das in etwa so: Beim Funktionsaufruf wird die aktuelle Adresse des PC/EIP Registers (program counter / extended instruction pointer) auf dem Stack gesichert, die sog. Rücksprungadresse. EIP ist sozusagen die Zeile im Maschinensprachcode, die als nächstes ausgeführt werden soll. Dann wird die Funktion aufgerufen (PC/EIP wird auf die Funktionsadresse gesetzt, was den Prozessor dazu veranlasst, mit den Anweisungen an dieser Stelle fortzufahren). Endet die Funktion (oder wird ein return aufgerufen), so wird die vorher gesicherte Rücksprungadresse vom Stack geholt und wieder in PC/EIP eingesetzt.

    Real passiert da noch ne Menge mehr...

    Wird beim return eine Variable notiert, so wird der Inhalt dieser Variablen an den Aufrufer zurückgeliefert.

    Werte zuweisen passiert mit =

    PHP-Code:

    function foo() {
      
    $data = array(1,2,3); // weist der Variablen $data ein Array mit drei Werten zu
      
    return $data;
      echo 
    "hierhin kommt die Funktion niemals!";
    }

    foo(); // Funktion aufrufen, Rückgabewert ignorieren

    $x foo(); // Funktion aufrufen und den Rückgabewert auf der Variablen $x sichern 
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      okay... habs nun gefunden:

      echo requestCurl( $xml );

      ersetzt durch:

      $fulldata = (requestCurl( $xml ));
      var_dump($fulldata);

      Kommentar


      • #4
        Das ist soweit alles richtig, aber:
        PHP-Code:
        echo requestCurl$xml ); 
        Hier machst du implizit zwei Dinge.
        1.) Es wird die Funktion requestCurl() aufgerufen
        2.) Der Rückgabewert der Funktion wird ausgegeben an den Browser (echo)
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5

          Ich war zu langsam... oder du zu schnell.

          Hatte die echo Anweisung völlig übersehen... ignoriert.
          Wohl auch deswegen, das ich nach der function gesucht habe.
          Aber das ist ja egal, ab das echo vor oder nach der function steht.

          Danke

          Kommentar

          Lädt...
          X