Mehrere Rückgaben von einer Funktion

Lesezeit: 6 Minuten

Mehrere Ruckgaben von einer Funktion
Vincent

Ist es möglich, eine Funktion mit zwei Rückgaben wie dieser zu haben:

function test($testvar)
{
  // Do something

  return $var1;
  return $var2;
}

Wenn ja, wie kann ich jede Rücksendung separat erhalten?

  • Was genau versuchst du zu erreichen? Wenn Sie Ihr eigentliches Problem erklärt haben, könnte Ihnen hier sicherlich jemand helfen, eine elegante Lösung zu finden.

    – Mike Daniels

    10. August 2010 um 17:55 Uhr

  • Die Frage unterscheidet nicht zwischen entweder/oder einem von zwei Werten, beiden zwei von zwei Werten oder neuem Konzept fauler Bewertung eins dann möglicherweise zwei von zwei Werten. Die erste ist bei jeder Art von bedingtem Fluss trivial. Das zweite ist in Python erlaubt: q, r = divmod(x, y); sowie Lispeln; PHP benötigt die list($q,$r)=twovals(); hack, wo function twovals(){ return array($a, $b); }. Lazy Evaluation ist ziemlich fortgeschritten und hat sich in PHP noch nicht durchgesetzt. Da die Frage nicht präzise ist, empfehlen wir, diesen Eintrag nicht als endgültige Referenz für dieses Thema zu verwenden.

    – Drachen Lord

    15. August 2012 um 22:54 Uhr

  • Wenn Sie beide Werte benötigen, geben Sie sie in einem Array zurück.

    – Bhargav Nanekalva

    12. November 2015 um 15:33 Uhr

  • @DragonLord in PHP 7.1 können Sie die Kurzlisten-Syntax

    – Janus Troelsen

    14. November 2016 um 15:37 Uhr

  • Es gibt eine doppelte Frage, aber mit prägnanteren Antworten kommen Sie schneller zum Punkt: Rückgabe von 2 Werten aus einer Funktion.

    – Grasdoppelt

    25. März 2017 um 21:46 Uhr


Mehrere Ruckgaben von einer Funktion
DockeryZ

Es gibt keine Möglichkeit, 2 Variablen zurückzugeben. Obwohl du kann propagieren Sie ein Array und geben Sie es zurück; Erstellen Sie eine Bedingung, um eine dynamische Variable zurückzugeben usw.

Diese Funktion würde beispielsweise zurückkehren $var2

function wtf($blahblah = true) {
    $var1 = "ONe";
    $var2 = "tWo";

    if($blahblah === true) {
      return $var2;
    }
    return $var1;
}

In Anwendung:

echo wtf();
//would echo: tWo
echo wtf("not true, this is false");
//would echo: ONe

Wenn Sie beide wollten, könnten Sie die Funktion ein wenig modifizieren

function wtf($blahblah = true) {
    $var1 = "ONe";
    $var2 = "tWo";

    if($blahblah === true) {
      return $var2;
    }

    if($blahblah == "both") {
      return array($var1, $var2);
    }

    return $var1;
}

echo wtf("both")[0]
//would echo: ONe
echo wtf("both")[1]
//would echo: tWo

list($first, $second) = wtf("both")
// value of $first would be $var1, value of $second would be $var2

  • Wenn nur PHP Perls hätte wantarray()

    – Markus B

    26. August 2010 um 22:22 Uhr

  • IMHO würde diese Antwort verbessert, wenn der erste Teil weggelassen würde, in dem erläutert wird, wie man eine zurückgibt oder je nach Bedingung einen anderen Wert. Ich bin mir sicher, dass mehr als 99,999 % der Leute, die zu dieser Diskussion kommen, wissen wollen, wie sie zurückkehren können beide Werte gleichzeitig. Sehen Sie sich die Antwort mit der höchsten Bewertung an.

    – WerkzeugmacherSteve

    3. April 2019 um 21:22 Uhr


  • @MarcB Wenn nur PHP und Perl Pythons automatisches Tupling / Unupling hätten – return a, b, c und a, b, c = func()

    – Nils Lindemann

    24. Juli 2020 um 9:01 Uhr

  • @NilsLindemann: php 7.1 tut, über die Array-Destrukturierungssyntax: return [$a, $b, $c]; und [$x, $y, $z] = func();. (Das ist eine triviale Anzahl von Zeichen mehr als die Python-Syntax und ist der beabsichtigte Weg, um dieses Ergebnis in PHP zu erreichen. Und wirklich, PHP hatte immer die gleiche Funktionalität, es erforderte nur eine etwas ausführlichere Syntax.)

    – WerkzeugmacherSteve

    21. Dezember 2020 um 23:16 Uhr


  • Sie können auch Folgendes tun: list($result_1, result_2) = test($testvar);

    – Tim Cooper

    10. August 2010 um 18:00 Uhr


  • @ Tim Cooper: result_2 oder $result_2?

    – Peter Mortensen

    12. Dezember 2019 um 20:37 Uhr

  • @Peter Mortensen: $result_2

    – Tim Cooper

    12. Dezember 2019 um 20:45 Uhr

Mehrere Ruckgaben von einer Funktion
Nukesor

Seit PHP 7.1 haben wir richtige Destrukturierung für Listen. Dabei können Sie folgende Dinge tun:

$test = [1, 2, 3, 4];
[$a, $b, $c, $d] = $test;
echo($a);
> 1
echo($d);
> 4

In einer Funktion würde das so aussehen:

function multiple_return() {
    return ['this', 'is', 'a', 'test'];
}

[$first, $second, $third, $fourth] = multiple_return();
echo($first);
> this
echo($fourth);
> test

Destrukturieren ist ein sehr mächtiges Werkzeug. Es ist auch in der Lage, Schlüssel=>Wert-Paare zu destrukturieren:

["a" => $a, "b" => $b, "c" => $c] = ["a" => 1, "b" => 2, "c" => 3];

Werfen Sie einen Blick auf die neue Feature-Seite für PHP 7.1:

Neue Eigenschaften

  • Ich wünschte, StackOverflow hätte eine Funktion wie „empfohlene Antwort“, auch wenn dies zum Zeitpunkt der Erstellung der Frage nicht akzeptiert wurde, da diese Antwort hier sehr nützlich und aktualisiert ist, aber natürlich nicht zum Thema gehört.

    – Jonatas-CD

    9. März 2019 um 20:43 Uhr

  • @ JonatasCD – nicht sicher, warum Sie sagen, dass diese Antwort “nicht zum Thema” ist. In PHP 7.1 ist es ist die bequemste Art, mehrere Rückgabewerte einer Funktion zu erstellen und zu verarbeiten. Für neuere PHP-Versionen ist dies also eine überlegene Antwort auf die ursprünglich akzeptierte Antwort.

    – WerkzeugmacherSteve

    3. April 2019 um 21:13 Uhr


  • @ToolmakerSteve Ich glaube, du hast mich missverstanden. “Off-Topic” zu der Frage war mein Vorschlag, die akzeptierte Frage basierend auf zukünftigen Implementierungen ändern zu können. Es war nichts gegen deine Antwort 😉

    – Jonatas-CD

    4. April 2019 um 15:10 Uhr

  • @ JonatasCD – Ahh, das erklärt es. (Ist nicht meine Antwort, ich war nur verwirrt.) Mindestens ein Tag mit der Aufschrift “Das ist aktueller als die akzeptierte Antwort”. Vielleicht müssen drei Personen diesem Tag zustimmen, und dann wird es vorgestellt. 🙂

    – WerkzeugmacherSteve

    4. April 2019 um 18:31 Uhr


1646929448 425 Mehrere Ruckgaben von einer Funktion
SztupY

In PHP 5.5 gibt es auch ein neues Konzept: generatorswo Sie mehrere Werte aus einer Funktion erhalten können:

function hasMultipleValues() {
    yield "value1";
    yield "value2";
}

$values = hasMultipleValues();
foreach ($values as $val) {
    // $val will first be "value1" then "value2"
}

  • Ich wünschte, StackOverflow hätte eine Funktion wie „empfohlene Antwort“, auch wenn dies zum Zeitpunkt der Erstellung der Frage nicht akzeptiert wurde, da diese Antwort hier sehr nützlich und aktualisiert ist, aber natürlich nicht zum Thema gehört.

    – Jonatas-CD

    9. März 2019 um 20:43 Uhr

  • @ JonatasCD – nicht sicher, warum Sie sagen, dass diese Antwort “nicht zum Thema” ist. In PHP 7.1 ist es ist die bequemste Art, mehrere Rückgabewerte einer Funktion zu erstellen und zu verarbeiten. Für neuere PHP-Versionen ist dies also eine überlegene Antwort auf die ursprünglich akzeptierte Antwort.

    – WerkzeugmacherSteve

    3. April 2019 um 21:13 Uhr


  • @ToolmakerSteve Ich glaube, du hast mich missverstanden. “Off-Topic” zu der Frage war mein Vorschlag, die akzeptierte Frage basierend auf zukünftigen Implementierungen ändern zu können. Es war nichts gegen deine Antwort 😉

    – Jonatas-CD

    4. April 2019 um 15:10 Uhr

  • @ JonatasCD – Ahh, das erklärt es. (Ist nicht meine Antwort, ich war nur verwirrt.) Mindestens ein Tag mit der Aufschrift “Das ist aktueller als die akzeptierte Antwort”. Vielleicht müssen drei Personen diesem Tag zustimmen, und dann wird es vorgestellt. 🙂

    – WerkzeugmacherSteve

    4. April 2019 um 18:31 Uhr


1646929448 843 Mehrere Ruckgaben von einer Funktion
Jake N

Oder Sie können als Referenz übergeben:

function byRef($x, &$a, &$b)
{
    $a = 10 * $x;
    $b = 100 * $x;
}

$a = 0;
$b = 0;

byRef(10, $a, $b);

echo $a . "\n";
echo $b;

Dies würde ausgegeben

100
1000

988440cookie-checkMehrere Rückgaben von einer Funktion

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy