多个变量赋值是通过值还是按引用完成的?

2022-08-30 11:51:03
$a = $b = 0;

在上面的代码中,是否都分配了 的值,或者只是引用?$a$b0$a$b


答案 1

对于原始类型,这是一个副本。

测试.php

$a = $b = 0;

$b = 3; 

var_dump($a);
var_dump($b);

输出

int(0) 
int(3)

对于对象,这是另一回事(PHP 5)

测试.php

class Obj
{ 
    public $_name;
}

$a = $b = new Obj();

$b->_name = 'steve';

var_dump($a);
var_dump($b);

输出

object(Obj)#1 (1) { ["_name"]=> string(5) "steve" } 
object(Obj)#1 (1) { ["_name"]=> string(5) "steve" }

答案 2

将此代码视为:

$a = ($b = 0);

表达式不仅赋值给 ,而且还产生结果。该结果是赋值的正确部分,或者只是赋值给的值。$b = 00$b$b

因此,也会被分配。$a0


推荐