Przypisać tę samą wartość wielu zmiennym jednocześnie?


115

Jak mogę jednocześnie przypisać tę samą wartość do wielu zmiennych w PHP?

Mam coś takiego:

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

W moim przypadku nie mogę zmienić nazwy wszystkich zmiennych, aby miały tę samą nazwę (co ułatwiłoby sprawę), więc czy istnieje sposób, aby przypisać tę samą wartość wszystkim zmiennym w znacznie bardziej zwarty sposób?

Odpowiedzi:


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

Genialny, działał idealnie dla mnie $ level1 = $ level2 = $ level3 = $ level4 = false;
geilt

1
Czy są jakieś ograniczenia?
dipi evil

9
Nie można tego użyć w klasie PHP i jest to typ surowy.
Chaminda Bandara

@ChamindaBandara co masz na myśli, mówiąc, że nie może być używane w klasie PHP?
Eoin

4
@Eoin: W ten sposób $var_a = $var_b = ... = new Class();wszystkie zmienne będą odnosić się do tego samego wystąpienia Class.
Tim Cooper

1

Aby dodać do innej odpowiedzi.

$a = $b = $c = $d właściwie znaczy $a = ( $b = ( $c = $d ) )

PHP domyślnie przekazuje prymitywne typy int, string, etc.według wartości i obiekty przez odwołanie .

To znaczy

$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

Jednak MOŻESZ przekazywać obiekty również według wartości, używając słowa kluczowego clone, ale będziesz musiał użyć nawiasów.

$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

ALE NIE MOŻESZ przekazywać typów pierwotnych przez odwołanie do słowa kluczowego & przy użyciu tej metody

$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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.