前回の変数管理の基礎(PHPの参照とは何か) でシンボルテーブルについて説明した。これがわかっていないとPHPの変数管理はわからない。
今回は、もっとも基本的な変数の値の代入、について説明する。
なぜ、こんな単純なことをいちいち説明しなければならないのか。
今回は、もっとも基本的な変数の値の代入、について説明する。
code1
$a=$b
なぜ、こんな単純なことをいちいち説明しなければならないのか。
2008年1月の日記
$a=$b
$a='one';
| 変数名 | 格納庫(zval)No. |
|---|---|
| a | #0001 |
| No. | value | type |
|---|---|---|
| #0001 | one | string(文字列型) |
$a= <span style="color:red;font-weight:bold;">&</span> $b;
| 変数名 | 格納庫(zval)No. |
|---|---|
| a | #0001 |
| b | #0001 |
| No. | 値 | type |
|---|---|---|
| #0001 | one | string |
$a='one';
$b= & $a;
$b= 'two';
としたとき、同じ格納庫(zval)No.に書き込まれるわけだから、$a,$bともに two となる。| 変数名 | 格納庫(zval)No. |
|---|---|
| a | #0001 |
| b | #0002 |
| No. | 値 | type |
|---|---|---|
| #0001 | one | string |
| #0002 | #0001 | (long?) |
$a='one'; $b= & $a; $a= 'two';と
$a='one'; $b= & $a; $b= 'two';
| 変数名 | 格納庫(zval)No. |
|---|---|
| a | #0001 |
| b | #0001 |
| No. | 値 | type |
|---|---|---|
| #0001 | two | string |
unset($a);unsetは、「変数を破棄する」でない。「シンボルテーブルからその変数名を削除する」という動作をする。つまり、
| 変数名 | 格納庫(zval)No. |
|---|---|
| b | #0001 |
| No. | 値 | type |
|---|---|---|
| #0001 | two | string |
$a='one'; $b= & $a; $a= 'two'; unset ($a);とすると、$bの値は、 two となる。
| 変数名($a) | →シンボルテーブル | →実際の値(実体:zval構造体に収納) |
| 変数名($b) | ||
| 変数名(・・・) |