PHPにおける=代入オペレータの異なるデータ型に対する異なる動作

1777 ワード

まず、割り当てオペレータ=の動作を説明し、次の例を参照します.
 
  
$i = 0;
$j = $i;
$j = 0;
echo $j; // 0

$arr = array(0);
$arr2 = $arr;
$arr2[0] = 1;
echo $arr[0]; // 0

class B
{
public $i = 0;
}

$b = new B();
$c = $b;
$c->i = 1;
echo($b->i); // 1

この例から、=オペレータの右側の変数が基本データ型または配列である場合、=オペレータは右側の変数のコピーを左変数に付与する.右の変数がclassのような基本データ型または配列でない場合、=右の変数への参照が左の変数に割り当てられます.注:右の変数が指すコンテンツ領域の参照ではなく、右の変数を指す参照です.具体的には下の例を見る
 
  
$a = new A();
$b_a = $a;
$b_r = &$a;

$b_a = null;
var_dump($a); // object(A)[2],$a
$b_r = null;
var_dump($a); // null,$a

上記の例でも説明したように、$var=&$aで値を付与すると、$var=nullで変数$varを破棄すると、実際には$varが指す内容がnullに設定されているが、この文は、そのコンテンツ領域を指す参照変数のいずれかが、そのコンテンツ領域の内容を破棄するために使用できることを示唆している.したがって,変数$varを破棄するにはunset($var)を用いる.PS:実際には$varを割り当てるのは参照にすぎず、メモリをあまり消費できません.破棄するかどうかはどうでもいいです.ここではunsetで破棄しなければなりません.
次に、『ユーザーズマニュアル』の「引用の解釈」の例を示します.
$a =& $b;
次の説明があります.
これは、$aおよび$bが同じ変数を指すことを意味する.
注意:$aと$bは、ここでは完全に同じです.これは、$aが$bを指しているのではなく、$aと$bが同じ場所を指しているわけではありません.
引用は何ですか.
 
  
PHP 。 C , , 。 PHP , , 。 Unix �D�D , 。 Unix 。

「参照とは何か」について説明します.
int i = 0;
int j = 0;
int *p = &i;
p = &j;
上のコードでは、pはiのメモリアドレスを指すポインタであり、*pこそその内容である.p=&jはpポインタの指向を変更し、*p=111の式でiの内容を変更することを指す.PHPでは、次の例ではありません
$i = 0;
$p = &$i;
$p=111は、すぐに$iの値を変更します.