Призначити одне і те ж значення кільком змінним одночасно?


115

Як я можу призначити одне і те ж значення для кількох змінних у PHP одночасно?

У мене є щось на кшталт:

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

У моєму випадку я не можу перейменувати всі змінні, щоб вони мали однакове ім’я (це полегшило б роботу), тож чи є спосіб присвоїти однакове значення всім змінним набагато більш компактно?

Відповіді:


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

Блискучий, ідеально підійшов для мене $ level1 = $ level2 = $ level3 = $ level4 = false;
geilt

1
Є якісь обмеження?
dipi zl

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.