Atribuir o mesmo valor a várias variáveis ​​de uma vez?


115

Como posso atribuir o mesmo valor para várias variáveis ​​em PHP de uma vez?

Eu tenho algo como:

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

No meu caso, não posso renomear todas as variáveis ​​para ter o mesmo nome (o que tornaria as coisas mais fáceis), então existe alguma maneira de atribuir o mesmo valor a todas as variáveis ​​de uma forma muito mais compacta?

Respostas:


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

Brilhante, funcionou perfeitamente para mim $ level1 = $ level2 = $ level3 = $ level4 = false;
geilt

1
Existe algum limite?
dipi evil

9
Isso não pode ser usado na classe Php e este é o tipo bruto.
Chaminda Bandara

@ChamindaBandara o que você quer dizer com não pode ser usado em uma classe PHP?
Eoin

4
@Eoin: Ao fazer $var_a = $var_b = ... = new Class();, todas as variáveis ​​farão referência à mesma instância de Class.
Tim Cooper de

1

Para adicionar à outra resposta.

$a = $b = $c = $d na verdade significa $a = ( $b = ( $c = $d ) )

O PHP passa tipos primitivos int, string, etc.por valor e objetos por referência por padrão.

Que significa

$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

Porém, você PODE passar objetos por valor também, usando a palavra-chave clone, mas terá que usar parênteses.

$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

MAS, você NÃO PODE passar tipos primitivos por referência com palavras-chave & usando este método

$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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.