php之普通變數賦值、物件賦值、引用賦值的區別

迷路的羔羊1996發表於2020-11-12

php中變數賦值預設是賦值傳遞,但是物件型別比較特殊,預設是引用傳遞

這涉及到php的深複製和淺複製,有興趣的可以看看

1. 原始型別 – 直接賦值

$name1 = 'sky';
$name2 = $name1;
$name2 = 'fly';
echo $name1.' '.$name2;     //sky fly

2. 陣列array – 直接賦值

$arr1 = array(0, 1, 2, 3);
$arr2 = $arr1;
$arr2[0] = 6;
echo $arr1[0].' '.$arr2[0]; //0 6

3. class類 – 記憶體地址

class Person{
    public $name = 'sky';
    public $age = 14;
}
$person1 = new Person();
$person2 = $person1;
$person2->name = 'moon';
echo $person1->name.' '.$person2->name;    //moon moon

可以看出,物件賦值預設採用的是引用賦值

4. php中規定,使用『&』符號,可以將普通賦值改成記憶體地址,看下面程式碼

$name1 = 'sky';
$name2 = &$name1;  //&符號的使用
$name2 = 'fly';
echo $name1.' '.$name2;     //fly fly

相關文章