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?
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?
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
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:
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
SztupY
In PHP 5.5 gibt es auch ein neues Konzept: generators
wo 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
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
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