Was genau versuchst du zu erreichen? Wenn Sie Ihr eigentliches Problem erklären, könnte Ihnen sicherlich jemand hier helfen, eine elegante Lösung zu finden.
Mike Daniels
3
Die Frage unterscheidet nicht zwischen einem / oder einem von zwei Werten, beiden zwei von zwei Werten oder einer verzögerten Bewertung eines neuen Konzepts, dann möglicherweise zwei von zwei Werten. Der erste ist bei jeder Art von bedingtem Fluss trivial. Die zweite ist in Python erlaubt: q, r = divmod (x, y); sowie Lisp; PHP benötigt die Liste ($ q, $ r) = twovals (); Hack, wobei Funktion twovals () {Array zurückgeben ($ a, $ b); }. Lazy Evaluation ist ziemlich weit fortgeschritten und hat sich in PHP noch nicht durchgesetzt. Da die Frage nicht präzise ist, empfehlen Sie, diesen Eintrag nicht als endgültige Referenz für dieses Thema zu verwenden.
DragonLord
5
Wenn Sie beide Werte benötigen, geben Sie sie in einem Array zurück.
Es gibt keine Möglichkeit, 2 Variablen zurückzugeben. Sie können ein Array jedoch weitergeben und zurückgeben. Erstellen Sie eine Bedingung, um eine dynamische Variable usw. zurückzugeben.
Zum Beispiel würde diese Funktion zurückkehren $var2
function wtf($blahblah =true){
$var1 ="ONe";
$var2 ="tWo";if($blahblah ===true){return $var2;}return $var1;}
In der Anwendung:
echo wtf();//would echo: tWo
echo wtf("not true, this is false");//would echo: ONe
Wenn Sie beide möchten, können Sie die Funktion ein wenig ändern
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
IMHO würde diese Antwort verbessert, wenn der erste Teil weggelassen würde, in dem erläutert wird, wie je nach Bedingung ein oder ein anderer Wert zurückgegeben werden kann. Ich bin sicher, dass 99,999 +% der Personen, die zu dieser Diskussion kommen, wissen möchten, wie beide Werte gleichzeitig zurückgegeben werden können. Siehe die Antwort mit der höchsten Bewertung.
ToolmakerSteve
401
Technisch gesehen können Sie nicht mehr als einen Wert zurückgeben. Es gibt jedoch mehrere Möglichkeiten, um diese Einschränkung zu umgehen. Die Rückgabe mehrerer Werte erfolgt am häufigsten mit dem listSchlüsselwort:
function getXYZ(){return array(4,5,6);}
list($x,$y,$z)= getXYZ();// Afterwards: $x == 4 && $y == 5 && $z == 6// (This will hold for all samples unless otherwise noted)
Technisch gesehen geben Sie ein Array zurück und listspeichern die Elemente dieses Arrays in verschiedenen Werten, anstatt das eigentliche Array zu speichern. Wenn Sie diese Technik verwenden, haben Sie das Gefühl , mehrere Werte zurückzugeben.
Die listLösung ist eher PHP-spezifisch. Es gibt einige Sprachen mit ähnlichen Strukturen, aber mehr Sprachen, die dies nicht tun. Es gibt eine andere Möglichkeit, die üblicherweise verwendet wird, um mehrere Werte "zurückzugeben", und sie ist in nahezu jeder Sprache verfügbar (auf die eine oder andere Weise). Diese Methode sieht jedoch ganz anders aus und ist möglicherweise gewöhnungsbedürftig.
// note that I named the arguments $a, $b and $c to show that// they don't need to be named $x, $y and $zfunction getXYZ(&$a,&$b,&$c){
$a =4;
$b =5;
$c =6;}
getXYZ($x, $y, $z);
Diese Technik wird auch in einigen Funktionen verwendet, die von PHP selbst definiert werden (z. B. $countin str_replace , $matchesin preg_match ). Dies mag sich ganz anders anfühlen als die Rückgabe mehrerer Werte, aber es lohnt sich zumindest, darüber Bescheid zu wissen.
Eine dritte Methode besteht darin, ein Objekt zu verwenden, um die verschiedenen Werte zu speichern, die Sie benötigen. Dies ist mehr Eingabe, daher wird es nicht ganz so oft verwendet wie die beiden oben genannten Methoden. Es kann jedoch sinnvoll sein, dies zu verwenden, wenn Sie denselben Variablensatz an mehreren Stellen verwenden (oder natürlich in einer Sprache arbeiten, die die oben genannten Methoden nicht unterstützt oder dies ohne zusätzliche Eingabe ermöglicht).
Die obigen Methoden fassen die Hauptmethoden zum Zurückgeben mehrerer Werte von einer Funktion zusammen. Es gibt jedoch Variationen dieser Methoden. Die interessantesten Variationen sind diejenigen, bei denen Sie tatsächlich ein Array zurückgeben, einfach weil Sie mit Arrays in PHP so viel tun können.
Erstens können wir einfach ein Array zurückgeben und es nur als Array behandeln:
Das Interessanteste am obigen Code ist, dass der Code in der Funktion derselbe ist wie im ersten Beispiel, das ich bereitgestellt habe. Nur der Code, der die Funktion aufruft, hat sich geändert. Dies bedeutet, dass es an demjenigen liegt, der die Funktion aufruft, wie das von der Funktion zurückgegebene Ergebnis zu behandeln ist.
Alternativ könnte man ein assoziatives Array verwenden:
PHP hat die compactFunktion, die es Ihnen ermöglicht, dasselbe wie oben zu tun, aber weniger Code zu schreiben. (Nun, das Beispiel wird nicht weniger Code enthalten, aber eine reale Anwendung würde es wahrscheinlich tun.) Ich denke jedoch, dass der Umfang der Tippersparnis minimal ist und das Lesen des Codes schwieriger wird, sodass ich es nicht selbst tun würde. Trotzdem hier ein Beispiel:
Es sollte beachtet werden, dass es compactzwar ein Gegenstück gibt extract, das hier im aufrufenden Code verwendet werden könnte, aber da es eine schlechte Idee ist, es zu verwenden (insbesondere für etwas so Einfaches wie dieses), werde ich nicht einmal ein Beispiel dafür geben. Das Problem ist, dass es "magisch" ist und Variablen für Sie erstellt, während Sie nicht sehen können, welche Variablen erstellt werden, ohne zu anderen Teilen des Codes zu wechseln.
Abschließend möchte ich erwähnen, dass listdies mit assoziativen Arrays nicht wirklich gut funktioniert . Folgendes wird das tun, was Sie erwarten:
function getXYZ(){return array('x'=>4,'y'=>5,'z'=>6);}
$array = getXYZ();
list($x, $y, $z)= getXYZ();
Wenn Sie listmit einem assoziativen Array arbeiten und jemand anderes den Code in der aufgerufenen Funktion in Zukunft ändern muss (was in fast jeder Situation vorkommen kann), kann er plötzlich kaputt gehen. Ich würde daher empfehlen, nicht listmit assoziativen Arrays zu kombinieren .
Das ist eine andere Option, aber ich habe nicht das Gefühl, mehrere Werte zurückzugeben, sondern nur ein Array zurückzugeben. Das kann aber nur ich sein. Persönlich würde ich return array('x' => $x, 'y' => $y, 'z' => $z)sauberer finden , aber bis zu dem Punkt, an dem ich es selbst schreiben würde, nicht bis zu dem Punkt, an dem ich andere bitten würde, dieses Format zu verwenden.
Jasper
2
Die Verwendung von List () ist eine großartige Antwort auf ein ähnliches Problem, das ich hatte. Dies ist eine hervorragende Möglichkeit, mehrere Variablen zu validieren und in eine Funktion zurückzugeben. Ein kurzer Blick auf die PHP-Dokumente wird mehr Licht in diese Funktion bringen und sie vielleicht klarer machen. php.net/manual/en/function.list.php .. danke Jasper!
JustinP
2
+1 für eine so umfassende Antwort, insbesondere auf eine so breite, allgemeine Frage. Trotzdem hat mir diese Antwort sehr geholfen.
Lee Blake
2
@ Mikey Historische Gründe. Diese Antwort wurde ursprünglich auf eine andere Frage gestellt, die gelöscht wurde, um ein genaues Duplikat dieser Frage zu sein (trotz der Tatsache, dass sie tatsächlich älter war). Die Antwort wurde auf diese Frage später als beim letzten Besuch desjenigen verschoben, der diese Frage gestellt hat.
Jasper
73
In Ihrem Beispiel wird die zweite Rückgabe niemals stattfinden - die erste Rückgabe ist das letzte, was PHP ausführen wird. Wenn Sie mehrere Werte zurückgeben müssen, geben Sie ein Array zurück:
function multiple_return(){return['this','is','a','test'];}[$first, $second, $third, $fourth]= multiple_return();
echo($first);>this
echo($fourth);> test
Destrukturierung ist ein sehr mächtiges Werkzeug. Es ist auch in der Lage, Schlüssel => Wertepaare zu zerstören:
Ich wünschte, StackOverflow hätte eine Funktion wie "vorgestellte Antwort", auch wenn diese zum Zeitpunkt der Erstellung der Frage nicht akzeptiert wird, da diese Antwort hier sehr nützlich und aktualisiert ist, aber natürlich nicht zum Thema gehört.
Jonatas CD
3
@ JonatasCD - nicht sicher, warum Sie sagen, dass diese Antwort "off-topic" ist. In PHP 7.1 es ist der bequemste Weg zu schaffen und mehrere Rückgabewerte aus einer Funktion zu behandeln. Für neuere PHP-Versionen ist dies eine überlegene Antwort auf die ursprünglich akzeptierte Antwort.
ToolmakerSteve
@ToolmakerSteve Ich denke du hast mich falsch verstanden. "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
@ JonatasCD - Ahh das erklärt es. (Ist nicht meine Antwort, ich war nur verwirrt.) Zumindest ein Tag mit der Aufschrift "Dies ist aktueller als die akzeptierte Antwort". Vielleicht müssen drei Personen diesem Tag zustimmen, und dann wird es vorgestellt. :)
ToolmakerSteve
26
In PHP 5.5 gibt es auch ein neues Konzept: generatorsHier können Sie mehrere Werte aus einer Funktion ergeben:
function hasMultipleValues(){yield"value1";yield"value2";}
$values = hasMultipleValues();foreach($values as $val){// $val will first be "value1" then "value2"}
Ich weiß, dass ich ziemlich spät dran bin, aber es gibt eine schöne und einfache Lösung für dieses Problem.
Durch Destrukturierung können mehrere Werte gleichzeitig zurückgegeben werden.
function test(){return['model'=>'someValue','data'=>'someothervalue'];}
Jetzt können Sie dies verwenden
$result = test();
extract($result);
extractErstellt für jedes Mitglied im Array eine Variable, die nach diesem Mitglied benannt ist. Sie können daher jetzt auf $modelund zugreifen$data
HINWEIS: Achten Sie darauf, dass die Schlüssel (hier modelund data) noch nicht als Variablen vorhanden sind. Verwenden Sie in diesem Fall den prefixParameter von extract, um Konflikte zu vermeiden.
ToolmakerSteve
7
Sie können mehrere Arrays und Skalare von einer Funktion zurückgeben
function x(){
$a=array("a","b","c");
$b=array("e","f");return array('x',$a,$b);}
list ($m,$n,$o)=x();
echo $m."\n";
print_r($n);
print_r($o);
Es ist nicht möglich, zwei return-Anweisungen zu haben. Es wird jedoch kein Fehler ausgegeben, aber wenn die Funktion aufgerufen wird, erhalten Sie nur den Wert der ersten return-Anweisung. Wir können die Rückgabe eines Arrays verwenden, um mehrere Werte zurückzugeben. Beispielsweise:
function test($testvar){// do something//just assigning a string for example, we can assign any operation result
$var1 ="result1";
$var2 ="result2";return array('value1'=> $var1,'value2'=> $var2);}
Funktionen geben per Definition nur einen Wert zurück.
Wie Sie angenommen haben, kann dieser Wert jedoch ein Array sein.
Sie können also sicherlich Folgendes tun:
<?PHP
function myfunc($a,$b){return array('foo'=>$a,'bar'=>$b);}
print_r(myfunc('baz','bork'));
Trotzdem lohnt es sich, sich einen Moment Zeit zu nehmen und darüber nachzudenken, was Sie zu lösen versuchen. Während die Rückgabe eines komplexen Ergebniswerts (wie eines Arrays oder eines Objekts) durchaus gültig ist, können Sie möglicherweise schlecht entwerfen, wenn Sie der Meinung sind, dass "Ich möchte zwei Werte zurückgeben". Ohne mehr Details in Ihrer Frage ist es schwer zu sagen, aber es tut nie weh, anzuhalten und zweimal nachzudenken.
Für mich ist es in Ordnung, wenn Sie 2-3 Variablen zurückgeben möchten, andernfalls sollten Sie ein Objekt mit den gewünschten Eigenschaften verwenden.
Die Antwort, die oben mit dem grünen Häkchen versehen ist, ist tatsächlich falsch. Sie können in PHP mehrere Werte zurückgeben, wenn Sie ein Array zurückgeben. Ein Beispiel finden Sie im folgenden Code:
<?php
function small_numbers(){return array (0,1,2);}
list ($zero, $one, $two)= small_numbers();
Dieser Code wird tatsächlich von der folgenden Seite auf der PHP-Website kopiert: http://php.net/manual/en/functions.returning-values.php
Ich habe dieselbe Art von Code auch oft selbst verwendet, kann dies also bestätigen es ist gut und dass es funktioniert.
Diese Antwort bezog sich auf das Codebeispiel in der Frage, ist also nicht unbedingt falsch. Die Frage ist jedoch nicht eindeutig. Die Absicht ist wahrscheinlich, zwei Werte von einem Funktionsaufruf zurückzugeben.
Peter Mortensen
3
Funktionen in PHP können nur eine Variable zurückgeben. Sie können Variablen mit globalem Gültigkeitsbereich verwenden, ein Array zurückgeben oder eine Variable unter Bezugnahme auf die Funktion übergeben und dann den Wert ändern. All dies verringert jedoch die Lesbarkeit Ihres Codes. Ich würde vorschlagen, dass Sie sich die Klassen ansehen.
Ich dachte, ich würde auf einige der Antworten von oben eingehen ...
class nameCheck{public $name;publicfunction __construct(){
$this->name = $name;}function firstName(){// If a name has been entered..if(!empty($this->name)){
$name = $this->name;
$errflag =false;// Return a array with both the name and errflagreturn array($name, $errflag);// If its empty..}elseif(empty($this->name)){
$errmsg ='Please enter a name.';
$errflag =true;// Return both the Error message and Flagreturn array($errmsg, $errflag);}}}if($_POST['submit']){
$a =new nameCheck;
$a->name = $_POST['name'];// Assign a list of variables from the firstName function
list($name, $err)= $a->firstName();// Display the values..
echo 'Name: '. $name;
echo 'Errflag: '. $err;}?><form method="post" action="<?php $_SERVER['PHP_SELF']; ?>"><input name="name"/><input type="submit" name="submit"value="submit"/></form>
Dies gibt Ihnen ein Eingabefeld und eine Senden-Schaltfläche, sobald das Namenseingabefeld leer ist, gibt es das Fehlerflag und eine Nachricht zurück. Wenn das Namensfeld einen Wert hat, werden der Wert / Name und das Fehlerflag 0 für false = keine Fehler zurückgegeben. Hoffe das hilft!
Ja und nein. Sie können nicht mehr als eine Variable / ein Objekt zurückgeben, aber wie Sie vorschlagen, können Sie sie in ein Array einfügen und dieses zurückgeben.
Die Verschachtelung von Arrays ist unbegrenzt. Sie können sie also einfach so verpacken, dass sie zurückkehren.
Sie können immer nur eine Variable zurückgeben, bei der es sich möglicherweise um ein Array handelt. Sie können jedoch globale Variablen innerhalb der Funktion ändern. Das ist meistens kein sehr guter Stil, aber es funktioniert. In Klassen ändern Sie normalerweise Klassenvariablen innerhalb von Funktionen, ohne sie zurückzugeben.
Die Antwort ist nein. Wenn der Parser die erste return-Anweisung erreicht, leitet er die Steuerung zurück an die aufrufende Funktion - Ihre zweite return-Anweisung wird niemals ausgeführt.
Ich denke, Eliego hat die Antwort klar erklärt. Wenn Sie jedoch beide Werte zurückgeben möchten, fügen Sie sie in ein Array ein und geben Sie sie zurück.
function test($testvar){// do somethingreturn array('var1'=>$var1,'var2'=>$var2);//defining a key would be better some times }
Warst du nüchtern, als du das geschrieben hast? Ich kann 2 Fehler auf einen Blick erkennen. 1) Sie verwenden das $thisSchlüsselwort, es wird jedoch keine Klasse oder kein Objekt erwähnt. 2) Wenn Sie Werte in Ihre Variable zurückgegeben haben $returned_values, sollten Sie von dieser Variablen wiedergeben:echo $returned_values['var1'];
dading84
Das Problem wurde behoben.
Gihan De Silva
0
<?php
function foo(){
$you =5;
$me =10;return $you;return $me;}
echo foo();//output is just 5 alone so we cant get second one it only retuns first one so better go with arrayfunction goo(){
$you =5;
$me =10;return $you_and_me = array($you,$me);}
var_dump(goo());// var_dump result is array(2) { [0]=> int(5) [1]=> int(10) } i think thats fine enough?>
Betreff "Werte von zwei oder mehr Variablen abrufen" : Meinen Sie "Werte von zwei oder mehr Variablen zurückgeben" ?
Peter Mortensen
0
Verwendet PHP immer noch "out-Parameter"? In diesem Fall können Sie die Syntax verwenden, um einen oder mehrere der Parameter zu ändern, die dann in Ihre Funktion eingehen. Sie können die geänderte Variable dann verwenden, nachdem Ihre Funktion zurückgegeben wurde.
publicfunction selectAllUsersByRole($userRole, $selector){
$this->userRole = $userLevel;
$this->selector = $selector;
$sql ="SELECT * FROM users WHERE role <= ? AND del_stat = 0";
$stm = $this->connect()->prepare($sql);// Connect function in Dbh connect to database file
$stm->execute([$this->userRole]);// This is PHP 7. Use array($this->userRole) for PHP 5
$usersIdArray = array();
$usersFNameArray = array();
$usersLNameArray = array();if($stm->rowCount()){while($row = $stm->fetch()){
array_push($usersIdArray, $row['id']);
array_push($usersFNameArray, $row['f_name']);
array_push($usersLNameArray, $row['l_name']);// You can return only $row['id'] or f_name or ...// I used the array because it's most used.}}if($this->selector ==1){return $usersIdArray;}elseif($this->selector ==2){return $usersFNameArray;}elseif($this->selector ==3){return $usersLNameArray;}}
Ich hatte ein ähnliches Problem - also habe ich es versucht und ein bisschen gegoogelt (diesen Thread gefunden). Nach 5 Minuten Versuch und Irrtum stellte ich fest, dass Sie einfach "UND" verwenden können, um zwei (möglicherweise mehr - noch nicht getestet) in einer Rückgabezeile zurückzugeben.
Mein Code:
function get_id(){global $b_id, $f_id;// stuff happensreturn $b_id AND $f_id;}//later in the code:
get_id();
var_dump($b_id);
var_dump($f_id);// tested output by var_dump
Es klappt. Ich habe beide Werte bekommen, die ich erwartet hatte / bekommen sollte. Ich hoffe ich konnte jedem helfen der diesen Thread liest :)
Das ist nicht richtig. 'AND' ist einfach ein boolescher Operator, daher gibt Ihre Funktion tatsächlich einen einzelnen booleschen Wert zurück. Der einzige Grund, warum es zu funktionieren scheint, ist, dass Sie $ b_id und $ f_id als globale Variablen deklarieren. Entfernen Sie das 'UND' sowie die return-Anweisung vollständig und Sie werden sehen, dass Ihre Ergebnisse gleich bleiben.
Matt Styles
Dies ist sehr irreführend, da Sie $ b_id und $ f_id global deklariert haben und daher in jedem Kontext verfügbar sind.
Antworten:
Es gibt keine Möglichkeit, 2 Variablen zurückzugeben. Sie können ein Array jedoch weitergeben und zurückgeben. Erstellen Sie eine Bedingung, um eine dynamische Variable usw. zurückzugeben.
Zum Beispiel würde diese Funktion zurückkehren
$var2
In der Anwendung:
Wenn Sie beide möchten, können Sie die Funktion ein wenig ändern
quelle
wantarray()
Technisch gesehen können Sie nicht mehr als einen Wert zurückgeben. Es gibt jedoch mehrere Möglichkeiten, um diese Einschränkung zu umgehen. Die Rückgabe mehrerer Werte erfolgt am häufigsten mit dem
list
Schlüsselwort:Technisch gesehen geben Sie ein Array zurück und
list
speichern die Elemente dieses Arrays in verschiedenen Werten, anstatt das eigentliche Array zu speichern. Wenn Sie diese Technik verwenden, haben Sie das Gefühl , mehrere Werte zurückzugeben.Die
list
Lösung ist eher PHP-spezifisch. Es gibt einige Sprachen mit ähnlichen Strukturen, aber mehr Sprachen, die dies nicht tun. Es gibt eine andere Möglichkeit, die üblicherweise verwendet wird, um mehrere Werte "zurückzugeben", und sie ist in nahezu jeder Sprache verfügbar (auf die eine oder andere Weise). Diese Methode sieht jedoch ganz anders aus und ist möglicherweise gewöhnungsbedürftig.Diese Technik wird auch in einigen Funktionen verwendet, die von PHP selbst definiert werden (z. B.
$count
in str_replace ,$matches
in preg_match ). Dies mag sich ganz anders anfühlen als die Rückgabe mehrerer Werte, aber es lohnt sich zumindest, darüber Bescheid zu wissen.Eine dritte Methode besteht darin, ein Objekt zu verwenden, um die verschiedenen Werte zu speichern, die Sie benötigen. Dies ist mehr Eingabe, daher wird es nicht ganz so oft verwendet wie die beiden oben genannten Methoden. Es kann jedoch sinnvoll sein, dies zu verwenden, wenn Sie denselben Variablensatz an mehreren Stellen verwenden (oder natürlich in einer Sprache arbeiten, die die oben genannten Methoden nicht unterstützt oder dies ohne zusätzliche Eingabe ermöglicht).
Die obigen Methoden fassen die Hauptmethoden zum Zurückgeben mehrerer Werte von einer Funktion zusammen. Es gibt jedoch Variationen dieser Methoden. Die interessantesten Variationen sind diejenigen, bei denen Sie tatsächlich ein Array zurückgeben, einfach weil Sie mit Arrays in PHP so viel tun können.
Erstens können wir einfach ein Array zurückgeben und es nur als Array behandeln:
Das Interessanteste am obigen Code ist, dass der Code in der Funktion derselbe ist wie im ersten Beispiel, das ich bereitgestellt habe. Nur der Code, der die Funktion aufruft, hat sich geändert. Dies bedeutet, dass es an demjenigen liegt, der die Funktion aufruft, wie das von der Funktion zurückgegebene Ergebnis zu behandeln ist.
Alternativ könnte man ein assoziatives Array verwenden:
PHP hat die
compact
Funktion, die es Ihnen ermöglicht, dasselbe wie oben zu tun, aber weniger Code zu schreiben. (Nun, das Beispiel wird nicht weniger Code enthalten, aber eine reale Anwendung würde es wahrscheinlich tun.) Ich denke jedoch, dass der Umfang der Tippersparnis minimal ist und das Lesen des Codes schwieriger wird, sodass ich es nicht selbst tun würde. Trotzdem hier ein Beispiel:Es sollte beachtet werden, dass es
compact
zwar ein Gegenstück gibtextract
, das hier im aufrufenden Code verwendet werden könnte, aber da es eine schlechte Idee ist, es zu verwenden (insbesondere für etwas so Einfaches wie dieses), werde ich nicht einmal ein Beispiel dafür geben. Das Problem ist, dass es "magisch" ist und Variablen für Sie erstellt, während Sie nicht sehen können, welche Variablen erstellt werden, ohne zu anderen Teilen des Codes zu wechseln.Abschließend möchte ich erwähnen, dass
list
dies mit assoziativen Arrays nicht wirklich gut funktioniert . Folgendes wird das tun, was Sie erwarten:Folgendes bewirkt jedoch etwas anderes:
Wenn Sie
list
mit einem assoziativen Array arbeiten und jemand anderes den Code in der aufgerufenen Funktion in Zukunft ändern muss (was in fast jeder Situation vorkommen kann), kann er plötzlich kaputt gehen. Ich würde daher empfehlen, nichtlist
mit assoziativen Arrays zu kombinieren .quelle
return array('x' => $x, 'y' => $y, 'z' => $z)
sauberer finden , aber bis zu dem Punkt, an dem ich es selbst schreiben würde, nicht bis zu dem Punkt, an dem ich andere bitten würde, dieses Format zu verwenden.In Ihrem Beispiel wird die zweite Rückgabe niemals stattfinden - die erste Rückgabe ist das letzte, was PHP ausführen wird. Wenn Sie mehrere Werte zurückgeben müssen, geben Sie ein Array zurück:
quelle
list($result_1, result_2) = test($testvar);
result_2
oder$result_2
?$result_2
Seit PHP 7.1 haben wir eine ordnungsgemäße Destrukturierung für Listen. Dabei können Sie folgende Dinge tun:
In einer Funktion würde dies so aussehen:
Destrukturierung ist ein sehr mächtiges Werkzeug. Es ist auch in der Lage, Schlüssel => Wertepaare zu zerstören:
Schauen Sie sich die neue Feature-Seite für PHP 7.1 an:
Neue Eigenschaften
quelle
In PHP 5.5 gibt es auch ein neues Konzept:
generators
Hier können Sie mehrere Werte aus einer Funktion ergeben:quelle
Oder Sie können als Referenz übergeben:
Dies würde ausgeben
quelle
Ich weiß, dass ich ziemlich spät dran bin, aber es gibt eine schöne und einfache Lösung für dieses Problem.
Durch Destrukturierung können mehrere Werte gleichzeitig zurückgegeben werden.
Jetzt können Sie dies verwenden
extract
Erstellt für jedes Mitglied im Array eine Variable, die nach diesem Mitglied benannt ist. Sie können daher jetzt auf$model
und zugreifen$data
quelle
model
unddata
) noch nicht als Variablen vorhanden sind. Verwenden Sie in diesem Fall denprefix
Parameter vonextract
, um Konflikte zu vermeiden.Sie können mehrere Arrays und Skalare von einer Funktion zurückgeben
quelle
Es ist nicht möglich, zwei return-Anweisungen zu haben. Es wird jedoch kein Fehler ausgegeben, aber wenn die Funktion aufgerufen wird, erhalten Sie nur den Wert der ersten return-Anweisung. Wir können die Rückgabe eines Arrays verwenden, um mehrere Werte zurückzugeben. Beispielsweise:
quelle
Funktionen geben per Definition nur einen Wert zurück.
Wie Sie angenommen haben, kann dieser Wert jedoch ein Array sein.
Sie können also sicherlich Folgendes tun:
Trotzdem lohnt es sich, sich einen Moment Zeit zu nehmen und darüber nachzudenken, was Sie zu lösen versuchen. Während die Rückgabe eines komplexen Ergebniswerts (wie eines Arrays oder eines Objekts) durchaus gültig ist, können Sie möglicherweise schlecht entwerfen, wenn Sie der Meinung sind, dass "Ich möchte zwei Werte zurückgeben". Ohne mehr Details in Ihrer Frage ist es schwer zu sagen, aber es tut nie weh, anzuhalten und zweimal nachzudenken.
quelle
Best Practice ist Ihre zurück Variablen in einem Array zu setzen und dann verwenden ,
list()
um assign Array von Werten zu Variablen.quelle
Ja, du kannst ein Objekt benutzen :-)
Am einfachsten ist es jedoch, ein Array zurückzugeben:
quelle
Für PHP 7.1 <= können Sie eine neue Syntax verwenden (anstelle der Listenfunktion ):
Für mich ist es in Ordnung, wenn Sie 2-3 Variablen zurückgeben möchten, andernfalls sollten Sie ein Objekt mit den gewünschten Eigenschaften verwenden.
quelle
Ich habe so für die PHP-Funktion mit mehreren Rückgabewerten implementiert. Sei nett mit deinem Code. Danke.
quelle
Die Antwort, die oben mit dem grünen Häkchen versehen ist, ist tatsächlich falsch. Sie können in PHP mehrere Werte zurückgeben, wenn Sie ein Array zurückgeben. Ein Beispiel finden Sie im folgenden Code:
Dieser Code wird tatsächlich von der folgenden Seite auf der PHP-Website kopiert: http://php.net/manual/en/functions.returning-values.php Ich habe dieselbe Art von Code auch oft selbst verwendet, kann dies also bestätigen es ist gut und dass es funktioniert.
quelle
Funktionen in PHP können nur eine Variable zurückgeben. Sie können Variablen mit globalem Gültigkeitsbereich verwenden, ein Array zurückgeben oder eine Variable unter Bezugnahme auf die Funktion übergeben und dann den Wert ändern. All dies verringert jedoch die Lesbarkeit Ihres Codes. Ich würde vorschlagen, dass Sie sich die Klassen ansehen.
quelle
Ich dachte, ich würde auf einige der Antworten von oben eingehen ...
Dies gibt Ihnen ein Eingabefeld und eine Senden-Schaltfläche, sobald das Namenseingabefeld leer ist, gibt es das Fehlerflag und eine Nachricht zurück. Wenn das Namensfeld einen Wert hat, werden der Wert / Name und das Fehlerflag 0 für false = keine Fehler zurückgegeben. Hoffe das hilft!
quelle
Einige bevorzugen möglicherweise die Rückgabe mehrerer Werte als Objekt:
Und nenne es so:
Oder:
quelle
Ja und nein. Sie können nicht mehr als eine Variable / ein Objekt zurückgeben, aber wie Sie vorschlagen, können Sie sie in ein Array einfügen und dieses zurückgeben.
Die Verschachtelung von Arrays ist unbegrenzt. Sie können sie also einfach so verpacken, dass sie zurückkehren.
quelle
Sie können immer nur eine Variable zurückgeben, bei der es sich möglicherweise um ein Array handelt. Sie können jedoch globale Variablen innerhalb der Funktion ändern. Das ist meistens kein sehr guter Stil, aber es funktioniert. In Klassen ändern Sie normalerweise Klassenvariablen innerhalb von Funktionen, ohne sie zurückzugeben.
quelle
Die Antwort ist nein. Wenn der Parser die erste return-Anweisung erreicht, leitet er die Steuerung zurück an die aufrufende Funktion - Ihre zweite return-Anweisung wird niemals ausgeführt.
quelle
Fügen Sie alle Variablen in einem Array hinzu und geben Sie schließlich die zurück
array
.Und dann
quelle
Ich denke, Eliego hat die Antwort klar erklärt. Wenn Sie jedoch beide Werte zurückgeben möchten, fügen Sie sie in ein Array ein und geben Sie sie zurück.
// um auf Rückgabewerte zuzugreifen
quelle
$this
Schlüsselwort, es wird jedoch keine Klasse oder kein Objekt erwähnt. 2) Wenn Sie Werte in Ihre Variable zurückgegeben haben$returned_values
, sollten Sie von dieser Variablen wiedergeben:echo $returned_values['var1'];
quelle
Sprachen, die mehrere Rückgaben ermöglichen, konvertieren normalerweise nur die mehreren Werte in eine Datenstruktur.
In Python können Sie beispielsweise mehrere Werte zurückgeben. Sie werden jedoch nur als ein Tupel zurückgegeben.
Sie können also mehrere Werte in PHP zurückgeben, indem Sie einfach ein einfaches Array erstellen und dieses zurückgeben.
quelle
Sie können die Werte von zwei oder mehr Variablen abrufen, indem Sie sie als Referenz festlegen:
Ausgabe:
quelle
Verwendet PHP immer noch "out-Parameter"? In diesem Fall können Sie die Syntax verwenden, um einen oder mehrere der Parameter zu ändern, die dann in Ihre Funktion eingehen. Sie können die geänderte Variable dann verwenden, nachdem Ihre Funktion zurückgegeben wurde.
quelle
Dies ist der einfachste Weg:
Wie können wir diese Funktion aufrufen?
Das ist es. Sehr leicht.
quelle
Es ist kein guter Weg, aber ich denke, wir können zwei Variablen gleichzeitig in einer Funktion setzen.
quelle
Ich hatte ein ähnliches Problem - also habe ich es versucht und ein bisschen gegoogelt (diesen Thread gefunden). Nach 5 Minuten Versuch und Irrtum stellte ich fest, dass Sie einfach "UND" verwenden können, um zwei (möglicherweise mehr - noch nicht getestet) in einer Rückgabezeile zurückzugeben.
Mein Code:
Es klappt. Ich habe beide Werte bekommen, die ich erwartet hatte / bekommen sollte. Ich hoffe ich konnte jedem helfen der diesen Thread liest :)
quelle