Ohne return-Befehl Werte immer 'false'

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

  • wahsaga
    antwortet
    OffTopic:
    Zitat von weltvolk Beitrag anzeigen
    Ihr habt recht. [...] Der Fehler liegt also woanders.
    Hallelujah.

    Einen Kommentar schreiben:


  • pekka
    antwortet
    Am einfachsten mit file_get_contents().
    Error_reporting() kurzfristig hochdrehen, um alle eventuellen Fehler angezeigt zu bekommen.
    und auch schauen, ob ein curl_error() nach curl_exec() eine Fehlermeldung auswirft.

    Einen Kommentar schreiben:


  • weltvolk
    antwortet
    Ihr habt recht. Es funktionieren nur die Funktionen nicht mehr, die eine Datei übertragen. Einen return-Befehl bei zweischrittigen Funktionen, wie oben die Funktion 'ftp_copy', auszulassen, ist sicherlich unsauber, funktioniert aber weiterhin. Der Fehler liegt also woanders. Wie kann ich den Dateiinhalt von $z denn anzeigen lassen/debuggen?

    Einen Kommentar schreiben:


  • pekka
    antwortet
    Zitat von piratos
    Es ist ja eigentlich alles gesagt.
    Warum wiederholst Du's dann?

    Zitat von piratos
    2a. Es ist unsinnig eine Funktion ohne Rückgabewert als eine solche nutzen zu wollen.
    <haarspalterei>
    null ist auch ein Rückgabewert.
    </haarspalterei>

    Einen Kommentar schreiben:


  • pekka
    antwortet
    Wenn eine Funktion keinen return-Befehl hat, gibt sie null zurück. Das hat sich in PHP5 nicht geändert. Wenn Du auf "ungleich true" prüfst, schlägt ein Rückgabewert 'null' genauso an wie 'false' oder jeder andere Wert außer true. Das war auch schon immer so. Deshalb würde ich gern die Original-Stelle sehen, an der Du das Ergebnis prüfst.

    Wenn Du folgendermaßen prüfst:

    if (!$ergebnis)

    schlagen false und null an.

    Wenn Du folgendermaßen prüfst:

    if ($ergebnis === false)

    schlägt nur false an. Das ist im Normalfall die optimale Lösung.

    Einen Kommentar schreiben:


  • PHP-Desaster
    antwortet
    Zitat von weltvolk Beitrag anzeigen
    Aber warum funktionieren die Funktionen nach der Umstellung auf PHP 5 nicht mehr, bei denen im Erfolgsfall kein return-Befehl im Code gesetzt wurde?
    Die Frage ist viel eher, wieso sollte das bei PHP 4 der Fall gewesen sein? Das war niemals so. Also hör jetzt auf mit dieser Sinnlos-Behauptung und fang an vernünftig zu debuggen.

    Einen Kommentar schreiben:


  • weltvolk
    antwortet
    Natürlich glaube ich dir. Aber warum funktionieren die Funktionen nach der Umstellung auf PHP 5 nicht mehr, bei denen im Erfolgsfall kein return-Befehl im Code gesetzt wurde?

    Einen Kommentar schreiben:


  • pekka
    antwortet
    Das Verhalten beim Zurückgeben von Funktionen hat sich mit PHP 5 nicht geändert. Glaub mir: Ich hab ein Tutorial zu dem Thema geschrieben. Auch return hat sich nicht verändert. Hast Du eine konkrete Stelle, an der return die Bearbeitung einer Funktion nicht abbricht?`Zeig mal.

    Zeig auchb mal die Original-Stelle, an der Du den Rückgabewert vergleichst. Passiert das so wie oben von Dir geschrieben? Daß das mal funktioniert hat, ist fast unmöglich bzw. für mich im Moment nicht nachzuvollziehen wie das gegangen sein soll.
    Zuletzt geändert von pekka; 03.08.2009, 10:18.

    Einen Kommentar schreiben:


  • weltvolk
    antwortet
    Zitat von PHP-Desaster Beitrag anzeigen
    Nö, kein Rückgabewert entspricht dem Wert NULL.
    NULL ist auf jeden Fall nicht true, weshalb dein else-Zweig ausgeführt wird. Der Wahrheitswert von NULL ist nämlich false.
    Habe sogar auch mal 'return false' mit ausgeklammert, so dass die Funktion zum Wahrheitswert 'true/false' gar keine Aussage mehr machen dürfte. Trotzdem wird bei Funktionsaufruf weiterhin 'false' ausgegeben, was auf eine große Selbstständigkeit von PHP 5 schließen lässt, denn bei PHP 4 (jedenfalls bei meinem Provider) erfolgte gar keine Meldung.

    Das Zweite, was mir aufgefallen ist, ist, dass eine Funktion durch 'return' gar nicht mehr abgebrochen/beendet wird, sondern, wenn in der Funktion nach einem return-Befehl noch Code folgt, die Funktion dann auch bis zum Ende des Codes weiterläuft. Das war bei PHP 4 auch anders!

    Jetzt muss ich die Skripte in Bezug auf die problematischen Funktionen komplett umschreiben, d. h. alle zweischrittigen Funktionen, auf die ich so stolz war, in zwei Funktionen teilen. Wie soll ich das schaffen, wo diese Funktionen Bestandteil von anderen Funktionen sind? Jetzt wird alles viel zu kompliziert!

    @pekka Es hat wirklich nichts mit cURL zu tun.
    Zuletzt geändert von weltvolk; 03.08.2009, 10:15.

    Einen Kommentar schreiben:


  • pekka
    antwortet
    PHP-Desaster hat schon alles gesagt... Und genau aus dem Grund bin ich sicher, daß dein Problem seine Wurzel woanders hat

    Was sagt eine Testausgabe des Dateiinhalts von $z? Denn der Punkt ist ja im Moment, wenn ich es richtig verstanden habe, daß eine leere Datei übergeben wird.

    Einen Kommentar schreiben:


  • PHP-Desaster
    antwortet
    Zu erwarten wäre doch, dass kein 'false' ausgegeben wird,
    Nö, kein Rückgabewert entspricht dem Wert NULL.
    aber jetzt bedeutet 'nicht true' wohl dasselbe wie 'false'. So war es vorher aber nicht!
    NULL ist auf jeden Fall nicht true, weshalb dein else-Zweig ausgeführt wird. Der Wahrheitswert von NULL ist nämlich false.

    Einen Kommentar schreiben:


  • weltvolk
    antwortet
    Habe zur Veranschaulichung ein kleines Skript erstellt:
    PHP-Code:
    <?php
    function addieren ($a$b) {
      
    $c $a $b;
      if (
    $c == true) {
        echo 
    "<p style=\"color:#008000; font-weight:bold\">Rechenvorgang ausgeführt. Ergebnis: $c</p>";
        
    // Kein 'return' des Ergebnisses
    //    return $c;
      
    } else {
        echo 
    "<p style=\"color:#bb0000; font-weight:bold\">Rechenvorgang kann nicht ausgeführt werden</p>";
        
    // 'return'
        
    return false;
      }
    }
    $ergebnis addieren("1""2");
    if (
    $ergebnis == true) {
      echo 
    "<p style=\"color:#008000; font-weight:bold\">Funktion meldet 'true'. Ergebnis: $ergebnis";
    } else {
      echo 
    "<p style=\"color:#bb0000; font-weight:bold\">Funktion meldet 'false'</p>";
    }
    ?>
    Die Funktion kann hier zwar nicht richtig arbeiten, da das Ergebnis des Rechenvorgangs nicht durch 'return' ausgegeben wird, aber beim Funktionsaufruf dürfte doch kein 'false' ausgegeben werden, weil es nicht so programmiert ist, oder? Unter http://www.weltvolk.de/php/addieren.php kann es aufgerufen werden. Hier die Ausgabe:
    Code:
    Rechenvorgang ausgeführt. Ergebnis: 3
    
    Funktion meldet 'false'
    Zu erwarten wäre doch, dass kein 'false' ausgegeben wird, aber jetzt bedeutet 'nicht true' wohl dasselbe wie 'false'. So war es vorher aber nicht!

    Einen Kommentar schreiben:


  • pekka
    antwortet
    Ahh jetzt versthee ich.

    Was sagt eine Testausgabe des Dateiinhalts von $z vor dem curl_exec()?

    Einen Kommentar schreiben:


  • pekka
    antwortet
    Wie weißt Du, daß die Datei $z leer ist - Du löschst sie doch kurz vor dem Return?

    Einen Kommentar schreiben:


  • weltvolk
    antwortet
    Schritt 1 schreibt die Datei $z. Es wird aber nicht 'return' getätigt. Schritt 2 liest $z. Allerdings nur den Dateinamen.

    Einen Kommentar schreiben:

Lädt...
X