php - Apakah kesan pas rujukan ampersand pada hasil operasi?
PHP中文网2017-06-21 10:10:41
0
3
703
$a = 1; $b = &$a; //Alamat pas. Mengulas baris ini mengembalikan 5. Jika ia tidak diulas (versi PHP <7), ia mengembalikan 6 $c = (++$a) + (++$a); echo $c; Adakah ia berkaitan ke versi? Juga, hasilnya adalah 6, yang sangat membingungkan saya
Mari kita bincangkan dahulu tentang operasi menambah tugasan rujukan
$b = &$a;
Operasi ini boleh dianggap bahawa semua operasi $a和$b都指向原本$a变量所在的那块内存(为了方便后面解释,称为内存X),也就是说,后面任何对于$a或者$b secara langsung mengubah suai nilai dalam ingatan ini.
Jadi proses berjalan selepas menambah baris ini:
Langkah sebelumnya ditinggalkan, huruf awal a ialah 1
Ini berkaitan dengan pelaksanaan asas PHP Ini adalah cerita yang panjang Adalah disyorkan untuk melihat analisis masalah yang sama pada github Penjelajahan yang disebabkan oleh pepijat PHP: https://github.com/xurenlu. /ph...
Mari kita bincangkan dahulu tentang operasi menambah tugasan rujukan
Operasi ini boleh dianggap bahawa semua operasi
$a
和$b
都指向原本$a
变量所在的那块内存(为了方便后面解释,称为内存X
),也就是说,后面任何对于$a
或者$b
secara langsung mengubah suai nilai dalam ingatan ini.Jadi proses berjalan selepas menambah baris ini:
Langkah sebelumnya ditinggalkan, huruf awal a ialah 1
$c = (++$a) + (++$a)
的两次++$a
都是在操作内存X
,也就是把内存X
里的值自增了两次,所以,在运算$c的值的时候,取的是这个内存里数的值,也就是自增了两次之后的内存X
里的值。所以,是3 + 3 = 6
(运算$c
时候,内存X
ialah 3).Jom bincang tentang pembedahan selepas komen rujukan
Jika tidak dipetik, maka bagi
$a
的自增接操作直接修改内存X
,而后通过运算符操作返回内存X的副本
,这样,两次的++$a
结果由于不是直接从内存X
获取的,而是改变内存X
值之后的副本,所以$c
在运算的时候就是2 + 3 = 5
.Ini berkaitan dengan pelaksanaan asas PHP Ini adalah cerita yang panjang Adalah disyorkan untuk melihat analisis masalah yang sama pada github
Penjelajahan yang disebabkan oleh pepijat PHP:
https://github.com/xurenlu. /ph...
Anda keluarkan C, apa kaitan C dengan B anda?