135 votes

Attribuer la même valeur à plusieurs variables à la fois ?

Comment attribuer la même valeur à plusieurs variables à la fois en PHP ?

J'ai quelque chose comme :

$var_a = 'A';
$var_b = 'A';
$same_var = 'A';
$var_d = 'A';
$some_var ='A';

Dans mon cas, je ne peux pas renommer toutes les variables pour qu'elles aient le même nom (ce qui faciliterait les choses), alors y a-t-il un moyen d'attribuer la même valeur à toutes les variables d'une manière beaucoup plus compacte ?

281voto

Tim Cooper Points 55292
$var_a = $var_b = $same_var = $var_d = $some_var = 'A';

0 votes

Brillant, cela a parfaitement fonctionné pour moi $level1 = $level2 = $level3 = $level4 = false ;

10 votes

Ceci ne peut pas être utilisé dans la classe Php et c'est le type brut.

0 votes

@ChamindaBandara qu'est-ce que vous voulez dire qu'il ne peut pas être utilisé dans une classe PHP ?

8voto

Xeuron Points 374

Pour ajouter à l'autre réponse.

$a = $b = $c = $d signifie en fait $a = ( $b = ( $c = $d ) )

PHP passe les types primitifs int, string, etc. par valeur et les objets par référence par défaut.

Cela signifie que

$c = 1234;
$a = $b = $c;
$c = 5678;
//$a and $b = 1234; $c = 5678;

$c = new Object();
$c->property = 1234;
$a = $b = $c;
$c->property = 5678;
// $a,b,c->property = 5678 because they are all referenced to same variable

Cependant, vous pouvez également transmettre des objets par valeur, en utilisant le mot-clé clone mais vous devrez utiliser des parenthèses.

$c = new Object();
$c->property = 1234;
$a = clone ($b = clone $c);
$c->property = 5678;
// $a,b->property = 1234; c->property = 5678 because they are cloned

MAIS, vous NE POUVEZ PAS passer les types primitifs par référence avec le mot-clé & en utilisant cette méthode

$c = 1234;

$a = $b = &$c; // no syntax error
// $a is passed by value. $b is passed by reference of $c

$a = &$b = &$c; // syntax error

$a = &($b = &$c); // $b = &$c is okay. 
// but $a = &(...) is error because you can not pass by reference on value (you need variable)

// You will have to do manually
$b = &$c;
$a = &$b;
etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X