la fonction renvoie plusieurs fois
P粉022285768
P粉022285768 2024-03-25 15:58:34
0
2
491

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粉022285768
P粉022285768

répondre à tous(2)
P粉548512637

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.

La solution est spécifique à PHP. Certaines langues ont des structures similaires, mais beaucoup d'autres n'en ont pas. Il existe une autre méthode couramment utilisée pour « renvoyer » plusieurs valeurs et est disponible dans presque toutes les langues (d’une manière ou d’une autre). Cependant, cette approche semble complètement différente, il faudra donc peut-être un certain temps pour s'y habituer.

// 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);
listCette 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 . $matchesLa 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

qui vous permet de faire la même chose que ci-dessus mais d'écrire moins de code. (Eh bien, l'exemple n'aura pas moins de code, mais l'application réelle le fera probablement.) Cependant, je pense que les économies de frappe sont minimes et que cela rend le code plus difficile à lire, donc je ne le ferais pas moi-même. Cependant, voici un exemple :

function getXYZ()
{
    $x = 4;
    $y = 5;
    $z = 6;
    
    return compact('x', 'y', 'z');
}

$array = getXYZ();

$x = $array['x'];
$y = $array['y'];
$z = $array['z'];
compactIl 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. compactextract

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 . 🎜
P粉717595985

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal