一次性将同一值赋给多个变量?

137

如何在PHP中一次性为多个变量赋相同的值?

我有类似以下代码:

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

在我的情况下,我无法将所有变量重命名为相同的名称(那样会使事情更容易),那么有没有更紧凑的方式将相同的值分配给所有变量?

2个回答

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

太棒了,对我来说完美地工作了。$level1 = $level2 = $level3 = $level4 = false; - geilt
10
这不能用于Php类中,它是原始类型。 - Chaminda Bandara
@ChamindaBandara 你的意思是它不能在PHP类中使用吗? - Eoin
5
在执行 $var_a = $var_b = ... = new Class(); 时,所有变量都将引用同一个 Class 实例。 - user142162
@Eoin 这意味着这种语法仅适用于 PHP 服务器端脚本,而不适用于 PHP 中的面向对象编程。如果您在 PHP 类中使用此方法,将会出现错误。 - Chaminda Bandara
1
这个语法符合 PSR 吗? - Davide Casiraghi

9

补充其他回答。

$a = $b = $c = $d 实际上意味着 $a = ( $b = ( $c = $d ) )

PHP默认按值传递基本类型,例如int、string等,按引用传递对象

这意味着

$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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接