Qu'essayez-vous exactement d'accomplir? Certes, si vous avez expliqué votre vrai problème, quelqu'un ici pourrait vous aider à trouver une solution élégante.
Mike Daniels
3
La question ne fait pas la différence entre / ou l'une des deux valeurs, les deux deux des deux valeurs, ou l'évaluation paresseuse du nouveau concept, puis éventuellement deux des deux valeurs. Le premier est trivial avec tout type de flux conditionnel. Le second est autorisé en python: q, r = divmod (x, y); ainsi que Lisp; PHP nécessite la liste ($ q, $ r) = twovals (); hack, où fonction twovals () {return array ($ a, $ b); }. L'évaluation paresseuse est plutôt avancée et n'a pas encore fait son chemin en PHP. Étant donné que la question n'est pas précise, nous vous recommandons de ne pas utiliser cette entrée comme référence définitive pour ce sujet.
DragonLord
5
Si vous avez besoin des deux valeurs, renvoyez-les dans un tableau.
Il y a une question en double, mais avec des réponses plus concises, cela vous permettra d'aller plus vite au point: renvoyer 2 valeurs d'une fonction .
Gras Double
Réponses:
162
Il n'y a aucun moyen de renvoyer 2 variables. Cependant, vous pouvez propager un tableau et le renvoyer; créer une conditionnelle pour renvoyer une variable dynamique, etc.
Par exemple, cette fonction retournerait $var2
function wtf($blahblah =true){
$var1 ="ONe";
$var2 ="tWo";if($blahblah ===true){return $var2;}return $var1;}
En application:
echo wtf();//would echo: tWo
echo wtf("not true, this is false");//would echo: ONe
Si vous les vouliez tous les deux, vous pourriez modifier un peu 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
À mon humble avis, cette réponse serait améliorée si elle omettait la première partie, qui explique comment renvoyer une ou une valeur différente, en fonction d'une condition. Je suis certain que 99,999 +% des personnes qui viennent à cette discussion veulent savoir comment renvoyer les deux valeurs en même temps. Voir la réponse la plus votée.
ToolmakerSteve
401
Techniquement, vous ne pouvez pas retourner plus d'une valeur. Cependant, il existe plusieurs façons de contourner cette limitation. La façon qui agit le plus comme retourner plusieurs valeurs, c'est avec le listmot - clé:
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 retournez un tableau et utilisez listpour stocker les éléments de ce tableau dans différentes valeurs au lieu de stocker le tableau réel. L'utilisation de cette technique donnera l' impression de renvoyer plusieurs valeurs.
La listsolution est plutôt spécifique à php. Il existe quelques langues avec des structures similaires, mais d'autres langues qui n'en ont pas. Il existe un autre moyen couramment utilisé pour "renvoyer" plusieurs valeurs et il est disponible dans presque toutes les langues (d'une manière ou d'une autre). Cependant, cette méthode sera très différente et il faudra peut-être 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 $zfunction getXYZ(&$a,&$b,&$c){
$a =4;
$b =5;
$c =6;}
getXYZ($x, $y, $z);
Cette technique est également utilisée dans certaines fonctions définies par php lui-même (par exemple $countdans str_replace , $matchesdans preg_match ). Cela peut sembler tout à fait différent de renvoyer plusieurs valeurs, mais cela vaut au moins la peine d'être connu.
Une troisième méthode consiste à utiliser un objet pour contenir les différentes valeurs dont vous avez besoin. Ceci est plus typé, donc il n'est pas utilisé aussi souvent que les deux méthodes ci-dessus. Cependant, il peut être judicieux de l'utiliser lorsque vous utilisez le même ensemble de variables à plusieurs endroits (ou bien sûr, en travaillant dans un langage qui ne prend pas en charge les méthodes ci-dessus ou vous permet de le faire sans taper supplémentaire).
Les méthodes ci-dessus résument les principales façons de renvoyer plusieurs valeurs à partir d'une fonction. Cependant, il existe des variations sur ces méthodes. Les variations les plus intéressantes à regarder sont celles dans lesquelles vous retournez réellement un tableau, simplement parce qu'il y a tellement de choses que vous pouvez faire avec les tableaux en PHP.
Tout d'abord, nous pouvons simplement retourner un tableau et ne pas le traiter comme autre chose qu'un tableau:
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 tout premier exemple que j'ai fourni; seul le code appelant la fonction a changé. Cela signifie que c'est à celui qui appelle la fonction comment traiter le résultat renvoyé par la fonction.
Alternativement, on pourrait utiliser un tableau associatif:
Php a la compactfonction qui vous permet de faire la même chose que ci-dessus mais en écrivant moins de code. (Eh bien, l'échantillon n'aura pas moins de code, mais une application réelle le ferait probablement.) Cependant, je pense que la quantité d'économie de frappe est minime et rend le code plus difficile à lire, donc je ne le ferais pas moi-même. Néanmoins, voici un exemple:
Il convient de noter que bien compactqu'il y ait un homologue extractqui pourrait être utilisé dans le code appelant ici, mais comme c'est une mauvaise idée de l'utiliser (en particulier pour quelque chose d'aussi simple que cela), je ne donnerai même pas d'échantillon pour cela. Le problème est qu'il fera de la "magie" et créera des variables pour vous, alors que vous ne pouvez pas voir quelles variables sont créées sans aller dans d'autres parties du code.
Enfin, je voudrais mentionner que listcela ne fonctionne pas vraiment bien avec un tableau associatif. Ce qui suit fera ce que vous attendez:
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:
Si vous l'avez utilisé listavec un tableau associatif et que quelqu'un d'autre doit changer le code dans la fonction appelée à l'avenir (ce qui peut arriver dans n'importe quelle situation), il peut soudainement se casser, donc je vous déconseille de le combiner listavec des tableaux associatifs.
C'est une autre option, mais cela ne me semble pas renvoyer plusieurs valeurs, tout comme renvoyer un tableau. Mais c'est peut-être juste moi. Personnellement, je trouverais return array('x' => $x, 'y' => $y, 'z' => $z)plus propre, mais au point où je l'écrirais moi-même, pas au point où je demanderais aux autres d'utiliser ce format.
Jasper
2
L'utilisation de List () est une excellente réponse à un problème similaire que j'ai rencontré. c'est un excellent moyen de valider et de renvoyer plusieurs variables dans une fonction. un rapide coup d'œil aux documents php éclairera cette fonction et la rendra peut-être plus claire. php.net/manual/en/function.list.php .. merci Jasper!
JustinP
2
+1 pour une réponse aussi complète, en particulier à une question générale aussi large. Malgré cela, cette réponse m'a énormément aidé.
Lee Blake
2
@Mikey Raisons historiques. Cette réponse a été initialement publiée sur une question différente, qui a été supprimée car elle était un double exact de celle-ci (malgré le fait qu'elle était en fait plus ancienne). La réponse a été transférée à cette question plus tard que la dernière visite de celui qui a posé cette question.
Jasper
73
Dans votre exemple, le deuxième retour ne se produira jamais - le premier retour est la dernière chose que PHP exécutera. Si vous devez renvoyer plusieurs valeurs, renvoyez un tableau:
function multiple_return(){return['this','is','a','test'];}[$first, $second, $third, $fourth]= multiple_return();
echo($first);>this
echo($fourth);> test
La déstructuration est un outil très puissant. Il est également capable de déstructurer des paires clé => valeur:
Je souhaite que StackOverflow ait une fonctionnalité comme `` réponse en vedette '' même si elle n'est pas acceptée au moment de la création de la question, car cette réponse ici est assez utile et mise à jour, mais elle est hors sujet, bien sûr.
Jonatas CD
3
@JonatasCD - vous ne savez pas pourquoi vous dites que cette réponse est "hors sujet". En PHP 7.1 , il est le moyen le plus pratique de créer et gérer plusieurs valeurs de retour d'une fonction. Donc, pour les nouvelles versions php, c'est une réponse supérieure à la réponse acceptée d'origine.
ToolmakerSteve
@ToolmakerSteve Je pense que vous m'avez mal compris. "hors sujet" à la question était ma suggestion de pouvoir changer quelle était la question acceptée en fonction des implémentations futures. Ce n'était rien contre votre réponse;)
Jonatas CD
@JonatasCD - Ahh cela explique cela. (N'est-ce pas ma réponse, j'étais juste perplexe.) Au moins une balise qui dit "c'est plus à jour que la réponse acceptée" Peut-être que trois personnes doivent être d'accord avec cette balise, puis elle apparaît. :)
ToolmakerSteve
26
En PHP 5.5, il existe également un nouveau concept:, generatorsoù vous pouvez générer plusieurs valeurs à partir d'une fonction:
function hasMultipleValues(){yield"value1";yield"value2";}
$values = hasMultipleValues();foreach($values as $val){// $val will first be "value1" then "value2"}
Je sais que je suis en retard, mais il existe une solution simple et agréable à ce problème.
Il est possible de renvoyer plusieurs valeurs à la fois en utilisant la déstructuration.
function test(){return['model'=>'someValue','data'=>'someothervalue'];}
Vous pouvez maintenant utiliser ceci
$result = test();
extract($result);
extractcrée une variable pour chaque membre du tableau, nommée d'après ce membre. Vous pouvez donc désormais accéder $modelet$data
REMARQUE: veillez à ce que les clés (ici modelet data) n'existent pas déjà en tant que variables. Si tel est le cas, utilisez le prefixparamètre de extractpour éviter les conflits.
ToolmakerSteve
7
Vous pouvez renvoyer plusieurs tableaux et scalaires à partir d'une fonction
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);
Il n'est pas possible d'avoir deux déclarations de retour. Cependant, il ne génère pas d'erreur, mais lorsque la fonction est appelée, vous ne recevrez que la première valeur de l'instruction return. Nous pouvons utiliser return of array pour obtenir plusieurs valeurs en retour. Par exemple:
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);}
Les fonctions, par définition, ne renvoient qu'une seule valeur.
Cependant, comme vous l'avez supposé, cette valeur peut être un tableau.
Vous pouvez donc certainement faire quelque chose comme:
<?PHP
function myfunc($a,$b){return array('foo'=>$a,'bar'=>$b);}
print_r(myfunc('baz','bork'));
Cela dit, cela vaut la peine de prendre un moment et de réfléchir à tout ce que vous essayez de résoudre. Bien que renvoyer une valeur de résultat complexe (comme un tableau ou un objet) soit parfaitement valide, si vous pensez que "je veux retourner deux valeurs", vous risquez de mal concevoir. Sans plus de détails dans votre question, c'est difficile à dire, mais ça ne fait jamais de mal de s'arrêter et de réfléchir à deux fois.
La meilleure pratique consiste à placer vos variables renvoyées dans un tableau, puis à utiliser list()pour attribuer des valeurs de tableau à des variables.
La réponse qui est donnée la coche verte ci-dessus est en fait incorrecte. Vous pouvez renvoyer plusieurs valeurs en PHP, si vous retournez un tableau. Voir le code suivant pour un exemple:
<?php
function small_numbers(){return array (0,1,2);}
list ($zero, $one, $two)= small_numbers();
Ce code est en fait copié à partir de la page suivante sur le site Web de PHP: http://php.net/manual/en/functions.returning-values.php
J'ai également utilisé le même type de code plusieurs fois moi-même, je peux donc confirmer que c'est bon et ça marche.
Cette réponse faisait référence à l'exemple de code dans la question, elle n'est donc pas strictement incorrecte. Mais la question est ambiguë. L'intention est probablement de renvoyer deux valeurs à partir d'un appel de fonction.
Peter Mortensen
3
Les fonctions en PHP ne peuvent renvoyer qu'une seule variable. vous pouvez utiliser des variables avec une portée globale, vous pouvez renvoyer un tableau, ou vous pouvez passer une variable par référence à la fonction et changer la valeur, .. mais tout cela diminuera la lisibilité de votre code. Je vous suggère de regarder dans les classes.
Je pensais développer quelques-unes des réponses ci-dessus ...
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>
Cela vous donnera un champ de saisie et un bouton de soumission une fois soumis, si le champ de saisie du nom est vide, il renverra l'indicateur d'erreur et un message. Si le champ de nom a une valeur, il renverra la valeur / le nom et un indicateur d'erreur de 0 pour faux = aucune erreur. J'espère que cela t'aides!
Oui et non. Vous ne pouvez pas renvoyer plus d'une variable / objet, mais comme vous le suggérez, vous pouvez les placer dans un tableau et les renvoyer.
Il n'y a pas de limite à l'imbrication des tableaux, vous pouvez donc simplement les empaqueter de cette façon pour revenir.
Vous ne pouvez toujours renvoyer qu'une seule variable qui peut être un tableau. Mais vous pouvez changer les variables globales depuis l'intérieur de la fonction. C'est la plupart du temps pas un très bon style, mais ça marche. Dans les classes, vous modifiez généralement les variables de classe dans les fonctions sans les renvoyer.
La réponse est non. Lorsque l'analyseur atteint la première instruction de retour, il redirige le contrôle vers la fonction appelante - votre deuxième instruction de retour ne sera jamais exécutée.
Étiez-vous sobre lorsque vous avez écrit cela? Je peux repérer 2 erreurs en un coup d'œil. 1) Vous utilisez le $thismot - clé mais aucune classe ou objet n'est mentionné. 2) Si vous avez renvoyé des valeurs dans votre variable $returned_values, alors vous devriez faire écho à partir de cette variable:echo $returned_values['var1'];
dading84
résolu le problème.
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?>
Re "obtenir les valeurs de deux ou plusieurs variables" : Voulez-vous dire "retourner les valeurs de deux ou plusieurs variables" ?
Peter Mortensen
0
PHP utilise-t-il toujours des paramètres de sortie? Si c'est le cas, vous pouvez alors utiliser la syntaxe pour modifier un ou plusieurs des paramètres entrant dans votre fonction. Vous seriez alors libre d'utiliser la variable modifiée après le retour de votre fonction.
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;}}
J'ai eu un problème similaire - j'ai donc essayé et googlé un peu (trouver ce fil). Après 5 minutes d'essais et d'erreurs, j'ai découvert que vous pouvez simplement utiliser "ET" pour renvoyer deux (peut-être plus - pas encore testé) dans une seule ligne de retour.
Mon 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
Ça marche. J'ai obtenu les deux valeurs que j'attendais / devrais obtenir. J'espère pouvoir aider quiconque à lire ce fil :)
Ce n'est pas correct. 'ET' est simplement un opérateur booléen, donc votre fonction retourne en fait une seule valeur booléenne. La seule raison pour laquelle cela semble fonctionner est que vous déclarez $ b_id et $ f_id comme variables globales. Supprimez le «ET» ainsi que la déclaration de retour et vous verrez que vos résultats restent les mêmes.
Matt Styles
c'est très trompeur, puisque vous avez déclaré $ b_id et $ f_id global, donc disponibles dans n'importe quel contexte.
Réponses:
Il n'y a aucun moyen de renvoyer 2 variables. Cependant, vous pouvez propager un tableau et le renvoyer; créer une conditionnelle pour renvoyer une variable dynamique, etc.
Par exemple, cette fonction retournerait
$var2
En application:
Si vous les vouliez tous les deux, vous pourriez modifier un peu la fonction
la source
wantarray()
Techniquement, vous ne pouvez pas retourner plus d'une valeur. Cependant, il existe plusieurs façons de contourner cette limitation. La façon qui agit le plus comme retourner plusieurs valeurs, c'est avec le
list
mot - clé:Techniquement, vous retournez un tableau et utilisez
list
pour stocker les éléments de ce tableau dans différentes valeurs au lieu de stocker le tableau réel. L'utilisation de cette technique donnera l' impression de renvoyer plusieurs valeurs.La
list
solution est plutôt spécifique à php. Il existe quelques langues avec des structures similaires, mais d'autres langues qui n'en ont pas. Il existe un autre moyen couramment utilisé pour "renvoyer" plusieurs valeurs et il est disponible dans presque toutes les langues (d'une manière ou d'une autre). Cependant, cette méthode sera très différente et il faudra peut-être s'y habituer.Cette technique est également utilisée dans certaines fonctions définies par php lui-même (par exemple
$count
dans str_replace ,$matches
dans preg_match ). Cela peut sembler tout à fait différent de renvoyer plusieurs valeurs, mais cela vaut au moins la peine d'être connu.Une troisième méthode consiste à utiliser un objet pour contenir les différentes valeurs dont vous avez besoin. Ceci est plus typé, donc il n'est pas utilisé aussi souvent que les deux méthodes ci-dessus. Cependant, il peut être judicieux de l'utiliser lorsque vous utilisez le même ensemble de variables à plusieurs endroits (ou bien sûr, en travaillant dans un langage qui ne prend pas en charge les méthodes ci-dessus ou vous permet de le faire sans taper supplémentaire).
Les méthodes ci-dessus résument les principales façons de renvoyer plusieurs valeurs à partir d'une fonction. Cependant, il existe des variations sur ces méthodes. Les variations les plus intéressantes à regarder sont celles dans lesquelles vous retournez réellement un tableau, simplement parce qu'il y a tellement de choses que vous pouvez faire avec les tableaux en PHP.
Tout d'abord, nous pouvons simplement retourner un tableau et ne pas le traiter comme autre chose qu'un tableau:
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 tout premier exemple que j'ai fourni; seul le code appelant la fonction a changé. Cela signifie que c'est à celui qui appelle la fonction comment traiter le résultat renvoyé par la fonction.
Alternativement, on pourrait utiliser un tableau associatif:
Php a la
compact
fonction qui vous permet de faire la même chose que ci-dessus mais en écrivant moins de code. (Eh bien, l'échantillon n'aura pas moins de code, mais une application réelle le ferait probablement.) Cependant, je pense que la quantité d'économie de frappe est minime et rend le code plus difficile à lire, donc je ne le ferais pas moi-même. Néanmoins, voici un exemple:Il convient de noter que bien
compact
qu'il y ait un homologueextract
qui pourrait être utilisé dans le code appelant ici, mais comme c'est une mauvaise idée de l'utiliser (en particulier pour quelque chose d'aussi simple que cela), je ne donnerai même pas d'échantillon pour cela. Le problème est qu'il fera de la "magie" et créera des variables pour vous, alors que vous ne pouvez pas voir quelles variables sont créées sans aller dans d'autres parties du code.Enfin, je voudrais mentionner que
list
cela ne fonctionne pas vraiment bien avec un tableau associatif. Ce qui suit fera ce que vous attendez:Cependant, ce qui suit fera quelque chose de différent:
Si vous l'avez utilisé
list
avec un tableau associatif et que quelqu'un d'autre doit changer le code dans la fonction appelée à l'avenir (ce qui peut arriver dans n'importe quelle situation), il peut soudainement se casser, donc je vous déconseille de le combinerlist
avec des tableaux associatifs.la source
return array('x' => $x, 'y' => $y, 'z' => $z)
plus propre, mais au point où je l'écrirais moi-même, pas au point où je demanderais aux autres d'utiliser ce format.Dans votre exemple, le deuxième retour ne se produira jamais - le premier retour est la dernière chose que PHP exécutera. Si vous devez renvoyer plusieurs valeurs, renvoyez un tableau:
la source
list($result_1, result_2) = test($testvar);
result_2
ou$result_2
?$result_2
Depuis PHP 7.1, nous avons une bonne déstructuration des listes. Vous pouvez ainsi faire des choses comme ceci:
Dans une fonction, cela ressemblerait à ceci:
La déstructuration est un outil très puissant. Il est également capable de déstructurer des paires clé => valeur:
Jetez un œil à la nouvelle page de fonctionnalités de PHP 7.1:
Nouvelles fonctionnalités
la source
En PHP 5.5, il existe également un nouveau concept:,
generators
où vous pouvez générer plusieurs valeurs à partir d'une fonction:la source
Ou vous pouvez passer par référence:
Cela produirait
la source
Je sais que je suis en retard, mais il existe une solution simple et agréable à ce problème.
Il est possible de renvoyer plusieurs valeurs à la fois en utilisant la déstructuration.
Vous pouvez maintenant utiliser ceci
extract
crée une variable pour chaque membre du tableau, nommée d'après ce membre. Vous pouvez donc désormais accéder$model
et$data
la source
model
etdata
) n'existent pas déjà en tant que variables. Si tel est le cas, utilisez leprefix
paramètre deextract
pour éviter les conflits.Vous pouvez renvoyer plusieurs tableaux et scalaires à partir d'une fonction
la source
Il n'est pas possible d'avoir deux déclarations de retour. Cependant, il ne génère pas d'erreur, mais lorsque la fonction est appelée, vous ne recevrez que la première valeur de l'instruction return. Nous pouvons utiliser return of array pour obtenir plusieurs valeurs en retour. Par exemple:
la source
Les fonctions, par définition, ne renvoient qu'une seule valeur.
Cependant, comme vous l'avez supposé, cette valeur peut être un tableau.
Vous pouvez donc certainement faire quelque chose comme:
Cela dit, cela vaut la peine de prendre un moment et de réfléchir à tout ce que vous essayez de résoudre. Bien que renvoyer une valeur de résultat complexe (comme un tableau ou un objet) soit parfaitement valide, si vous pensez que "je veux retourner deux valeurs", vous risquez de mal concevoir. Sans plus de détails dans votre question, c'est difficile à dire, mais ça ne fait jamais de mal de s'arrêter et de réfléchir à deux fois.
la source
La meilleure pratique consiste à placer vos variables renvoyées dans un tableau, puis à utiliser
list()
pour attribuer des valeurs de tableau à des variables.la source
Oui, vous pouvez utiliser un objet :-)
Mais la manière la plus simple est de renvoyer un tableau:
la source
Pour PHP 7.1 <= vous pouvez utiliser une nouvelle syntaxe (au lieu de la fonction de liste ):
C'est OK pour moi si vous voulez retourner 2-3 variables, sinon vous devez utiliser un objet avec les propriétés souhaitées.
la source
J'ai implémenté comme ceci pour la fonction PHP à plusieurs valeurs de retour. soyez gentil avec votre code. Merci.
la source
La réponse qui est donnée la coche verte ci-dessus est en fait incorrecte. Vous pouvez renvoyer plusieurs valeurs en PHP, si vous retournez un tableau. Voir le code suivant pour un exemple:
Ce code est en fait copié à partir de la page suivante sur le site Web de PHP: http://php.net/manual/en/functions.returning-values.php J'ai également utilisé le même type de code plusieurs fois moi-même, je peux donc confirmer que c'est bon et ça marche.
la source
Les fonctions en PHP ne peuvent renvoyer qu'une seule variable. vous pouvez utiliser des variables avec une portée globale, vous pouvez renvoyer un tableau, ou vous pouvez passer une variable par référence à la fonction et changer la valeur, .. mais tout cela diminuera la lisibilité de votre code. Je vous suggère de regarder dans les classes.
la source
Je pensais développer quelques-unes des réponses ci-dessus ...
Cela vous donnera un champ de saisie et un bouton de soumission une fois soumis, si le champ de saisie du nom est vide, il renverra l'indicateur d'erreur et un message. Si le champ de nom a une valeur, il renverra la valeur / le nom et un indicateur d'erreur de 0 pour faux = aucune erreur. J'espère que cela t'aides!
la source
Certains pourraient préférer renvoyer plusieurs valeurs en tant qu'objet:
Et appelez-le comme ceci:
Ou:
la source
Oui et non. Vous ne pouvez pas renvoyer plus d'une variable / objet, mais comme vous le suggérez, vous pouvez les placer dans un tableau et les renvoyer.
Il n'y a pas de limite à l'imbrication des tableaux, vous pouvez donc simplement les empaqueter de cette façon pour revenir.
la source
Vous ne pouvez toujours renvoyer qu'une seule variable qui peut être un tableau. Mais vous pouvez changer les variables globales depuis l'intérieur de la fonction. C'est la plupart du temps pas un très bon style, mais ça marche. Dans les classes, vous modifiez généralement les variables de classe dans les fonctions sans les renvoyer.
la source
La réponse est non. Lorsque l'analyseur atteint la première instruction de retour, il redirige le contrôle vers la fonction appelante - votre deuxième instruction de retour ne sera jamais exécutée.
la source
Ajoutez toutes les variables dans un tableau, puis retournez enfin le
array
.Puis
la source
Je pense qu'Eliego a clairement expliqué la réponse. Mais si vous souhaitez renvoyer les deux valeurs, placez-les dans un tableau et renvoyez-les.
// pour accéder aux valeurs de retour
la source
$this
mot - clé mais aucune classe ou objet n'est mentionné. 2) Si vous avez renvoyé des valeurs dans votre variable$returned_values
, alors vous devriez faire écho à partir de cette variable:echo $returned_values['var1'];
la source
Les langages qui autorisent plusieurs retours convertissent généralement les valeurs multiples en une structure de données.
Par exemple, en Python, vous pouvez renvoyer plusieurs valeurs. Cependant, ils ne sont en fait retournés que comme un tuple.
Vous pouvez donc retourner plusieurs valeurs en PHP en créant simplement un tableau simple et en le renvoyant.
la source
Vous pouvez obtenir les valeurs de deux ou plusieurs variables en les définissant par référence:
Production:
la source
PHP utilise-t-il toujours des paramètres de sortie? Si c'est le cas, vous pouvez alors utiliser la syntaxe pour modifier un ou plusieurs des paramètres entrant dans votre fonction. Vous seriez alors libre d'utiliser la variable modifiée après le retour de votre fonction.
la source
C'est la façon la plus simple de le faire:
Comment pouvons-nous appeler cette fonction?
C'est tout. Très facile.
la source
Ce n'est pas un bon moyen, mais je pense que nous pouvons définir deux variables dans une fonction en même temps.
la source
J'ai eu un problème similaire - j'ai donc essayé et googlé un peu (trouver ce fil). Après 5 minutes d'essais et d'erreurs, j'ai découvert que vous pouvez simplement utiliser "ET" pour renvoyer deux (peut-être plus - pas encore testé) dans une seule ligne de retour.
Mon code:
Ça marche. J'ai obtenu les deux valeurs que j'attendais / devrais obtenir. J'espère pouvoir aider quiconque à lire ce fil :)
la source