Maison > Questions et réponses > le corps du texte
Est-il possible d'avoir une fonction avec deux valeurs de retour comme celle-ci :
function test($testvar) { // Do something return $var1; return $var2; }
Si oui, comment puis-je obtenir chaque retour séparément ?
P粉5485126372024-03-26 11:41:34
Techniquement, vous ne pouvez pas renvoyer plusieurs valeurs. Il existe cependant des moyens de contourner cette limitation. La manière la plus similaire de renvoyer plusieurs valeurs consiste à utiliser le mot-clé list
:
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)
Techniquement, vous renvoyez un tableau et utilisez list
pour stocker les éléments de ce tableau avec des valeurs différentes, plutôt que de stocker le tableau réel. L'utilisation de cette technique donnera l'impression de renvoyer plusieurs valeurs.
// note that I named the arguments $a, $b and $c to show that // they don't need to be named $x, $y and $z function getXYZ(&$a, &$b, &$c) { $a = 4; $b = 5; $c = 6; } getXYZ($x, $y, $z);
list
Cette technique est également utilisée dans certaines fonctions définies par PHP lui-même (par exemple $count ">str_replace). Cela peut sembler très différent du renvoi de plusieurs valeurs, mais cela vaut la peine le moins le sait .
$matches
La troisième méthode consiste à utiliser un objet pour contenir les différentes valeurs dont vous avez besoin. Cela nécessite plus de saisie, elle est donc utilisée moins fréquemment que les deux méthodes ci-dessus. Néanmoins, il peut être judicieux d'utiliser cette fonctionnalité lorsque le même ensemble de variables est utilisé à plusieurs endroits (ou, bien sûr, dans un langage qui ne prend pas en charge la méthode ci-dessus ou vous permet de le faire sans saisie supplémentaire).
class MyXYZ { public $x; public $y; public $z; } function getXYZ() { $out = new MyXYZ(); $out->x = 4; $out->y = 5; $out->z = 6; return $out; } $xyz = getXYZ(); $x = $xyz->x; $y = $xyz->y; $z = $xyz->z;
La méthode ci-dessus résume les principales façons dont les fonctions renvoient plusieurs valeurs. Il existe cependant quelques variantes de ces méthodes. Les variantes les plus intéressantes sont celles qui renvoient réellement un tableau, car vous pouvez faire beaucoup de choses avec les tableaux en PHP.
Premièrement, nous pouvons simplement renvoyer un tableau sans le traiter comme autre chose qu'un tableau :
function getXYZ() { return array(1,2,3); } $array = getXYZ(); $x = $array[0]; $y = $array[1]; $z = $array[2];
La partie la plus intéressante du code ci-dessus est que le code à l'intérieur de la fonction est le même que dans le premier exemple que j'ai fourni ; seul le code qui appelle la fonction a changé. Cela signifie que ce que l'appelant de la fonction fait avec les résultats renvoyés par la fonction dépend de la personne qui a appelé la fonction.
Vous pouvez également utiliser un tableau associatif :
function getXYZ() { return array('x' => 4, 'y' => 5, 'z' => 6); } $array = getXYZ(); $x = $array['x']; $y = $array['y']; $z = $array['z'];
Php a la fonction compact
function getXYZ() { $x = 4; $y = 5; $z = 6; return compact('x', 'y', 'z'); } $array = getXYZ(); $x = $array['x']; $y = $array['y']; $z = $array['z'];
compact
Il convient de noter que même si compact a un homologue dans extract qui peut être utilisé dans le code appelant ici, car son utilisation est une mauvaise idée (surtout pour quelque chose d'aussi simple que cette chose), Je n'en donnerai même pas un échantillon. Le problème est que cela crée « comme par magie » les variables pour vous, et vous ne pouvez pas voir quelles variables sont créées sans regarder dans d’autres parties du code. compact
在 extract
Enfin, j'aimerais mentionner que list
ne fonctionne pas bien avec les tableaux associatifs. Le contenu suivant répondra à vos attentes :
function getXYZ()
{
return array('x' => 4,
'y' => 5,
'z' => 6);
}
$array = getXYZ();
list($x, $y, $z) = getXYZ();
Cependant, ce qui suit fera quelque chose de différent :
function getXYZ()
{
return array('x' => 4,
'z' => 6,
'y' => 5);
}
$array = getXYZ();
list($x, $y, $z) = getXYZ();
// Pay attention: $y == 6 && $z == 5
Si vous utilisez list
与关联数组一起使用,并且其他人将来必须更改被调用函数中的代码(这可能发生在任何情况下),它可能会突然中断,所以我建议不要将 list
avec un tableau associatif et que quelqu'un d'autre doit modifier le code dans la fonction appelée à l'avenir (cela peut arriver dans tous les cas), cela pourrait se briser soudainement, je recommande donc de ne pas utiliser
avec un tableau associatif . 🎜répondre0
P粉7175959852024-03-26 09:06:04
Impossible de renvoyer 2 variables. Cependant, vous pouvez étaler un tableau et le renvoyer créer des conditions pour renvoyer des variables dynamiques, etc.
Par exemple, cette fonction renverra $var2
function wtf($blahblah = true) { $var1 = "ONe"; $var2 = "tWo"; if($blahblah === true) { return $var2; } return $var1; }
Dans l'application :
echo wtf(); //would echo: tWo echo wtf("not true, this is false"); //would echo: ONe
Si vous voulez les deux, vous pouvez modifier légèrement la fonction
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