Назначить одно и то же значение сразу нескольким переменным?


116

Как я могу назначить одно и то же значение сразу нескольким переменным в PHP?

У меня что-то вроде:

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

В моем случае я не могу переименовать все переменные, чтобы они имели одинаковое имя (что упростило бы задачу), так есть ли способ присвоить одно и то же значение всем переменным гораздо более компактным способом?

Ответы:


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

Великолепно, отлично сработало для меня $ level1 = $ level2 = $ level3 = $ level4 = false;
geilt

1
Есть ли ограничения?
dipi evil

9
Это нельзя использовать в классе Php, и это необработанный тип.
Чаминда Бандара,

@ChamindaBandara, что вы имеете в виду, его нельзя использовать в классе PHP?
Eoin

4
@Eoin: При этом $var_a = $var_b = ... = new Class();все переменные будут ссылаться на один и тот же экземпляр Class.
Тим Купер

1

Чтобы добавить к другому ответу.

$a = $b = $c = $d на самом деле означает $a = ( $b = ( $c = $d ) )

По умолчанию PHP передает примитивные типы int, string, etc.по значению, а объекты - по ссылке .

Это значит

$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

Однако вы МОЖЕТЕ передавать объекты по значению, используя ключевое слово clone, но вам придется использовать скобки.

$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

НО, вы НЕ МОЖЕТЕ передавать примитивные типы по ссылке с ключевым словом, & используя этот метод

$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.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.