Apabila menguji PHP tentang pengiraan rujukan, saya melihat pembolehubah mempunyai bekas zval. Ia mengandungi dua atribut, satu ialah refcount dan satu lagi ialah_ref
$array= array( 'meaning' => 'life', 'number' => 42 );
xdebug_debug_zval( 'array' );
Apabila menguji kiraan rujukan tatasusunan, keputusan dikembalikan seperti yang diharapkan
array (refcount=1, is_ref=0),
array (saiz=2)
'makna' => (refcount=1, is_ref=0), rentetan 'hidup' (panjang=4)
'nombor ' => (refcount=1, is_ref=0),int 42
Tetapi apabila menguji subjek. Ada soalan?
class A{
private $a1;
public $a2;
}
$class1 = new A();
xdebug_debug_zval('class1');
kelas1:
(refcount=1, is_ref=0),
objek(A)[1]
private 'a1' => (refcount=2, is_ref=0),null
public 'a2' => ; (refcount=2, is_ref=0),null
Tidak faham kenapa? Adakah ini akan menjadi 2? Daripada 1. Daripada seperti array php. Kiraan semula yang dijangkakan ialah 1
Dan dalam manual rasmi php. Penjelasan tentang jenis pematuhan mengenai pengiraan rujukan.
kiraan rujukan php
.Perkara menjadi lebih rumit apabila melibatkan jenis komposit seperti tatasusunan dan objek Tidak seperti nilai jenis skalar, pembolehubah jenis tatasusunan dan objek menyimpan ahli atau sifatnya dalam jadual simbolnya sendiri.
业精于勤,荒于嬉;行成于思,毁于随。