每锟斤拷php锟斤拷锟斤拷锟斤拷锟斤拷一锟斤拷锟斤拷"zval"锟侥憋拷锟斤拷锟斤拷锟斤拷锟叫★拷一锟斤拷zval锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟剿帮拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟酵猴拷值锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟街节的讹拷锟斤拷锟斤拷息锟斤拷锟斤拷一锟斤拷锟斤拷"is_ref"锟斤拷锟角革拷bool值锟斤拷锟斤拷锟斤拷锟斤拷识锟斤拷锟斤拷锟斤拷锟斤拷欠锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷眉锟斤拷锟�(reference set)锟斤拷通锟斤拷锟斤拷锟斤拷纸冢锟絧hp锟斤拷锟斤拷锟斤拷馨锟斤拷锟酵拷锟斤拷锟斤拷锟斤拷锟斤拷帽锟斤拷锟斤拷锟斤拷挚锟斤拷锟斤拷锟斤拷锟斤拷锟絧hp锟斤拷锟斤拷锟矫伙拷通锟斤拷使锟斤拷&锟斤拷使锟斤拷锟皆讹拷锟斤拷锟斤拷锟矫o拷zval锟斤拷锟斤拷锟斤拷锟斤拷锟叫伙拷锟斤拷一锟斤拷锟节诧拷锟斤拷锟矫硷拷锟斤拷锟斤拷锟狡o拷锟斤拷锟脚伙拷锟节达拷使锟矫★拷锟节讹拷锟斤拷锟斤拷锟斤拷锟街斤拷锟斤拷"refcount"锟斤拷锟斤拷锟皆憋拷示指锟斤拷锟斤拷锟絲val锟斤拷锟斤拷锟斤拷锟斤拷锟侥憋拷锟斤拷(也锟狡凤拷锟脚硷拷symbol)锟斤拷锟斤拷锟斤拷锟斤拷锟叫的凤拷锟脚达拷锟斤拷一锟斤拷锟斤拷锟脚憋拷锟叫o拷锟斤拷锟斤拷每锟斤拷锟斤拷锟脚讹拷锟斤拷锟斤拷锟斤拷锟斤拷(scope)锟斤拷锟斤拷些锟斤拷锟脚憋拷(锟斤拷锟界:通锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥的脚憋拷)锟斤拷每锟斤拷锟斤拷锟斤拷锟斤拷锟竭凤拷锟斤拷也锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷值时锟斤拷锟酵伙拷锟斤拷锟斤拷一锟斤拷zval锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
Example #1 锟斤拷锟斤拷一锟斤拷锟铰碉拷zval锟斤拷锟斤拷
<?php
$a = "new string";
?>
锟斤拷锟斤拷锟斤拷锟叫o拷锟铰的憋拷锟斤拷a锟斤拷锟斤拷锟节碉拷前锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟缴的★拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷为 string 锟斤拷值为new string锟侥憋拷锟斤拷锟斤拷锟斤拷锟斤拷锟节讹拷锟斤拷锟斤拷锟斤拷锟斤拷纸锟斤拷锟较拷校锟�"is_ref"锟斤拷默锟斤拷锟斤拷锟斤拷为 FALSE
锟斤拷锟斤拷为没锟斤拷锟轿猴拷锟皆讹拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷伞锟�"refcount" 锟斤拷锟借定为 1锟斤拷锟斤拷为锟斤拷锟斤拷只锟斤拷一锟斤拷锟斤拷锟斤拷使锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟�. 注锟解到锟斤拷"refcount"锟斤拷值锟斤拷1时锟斤拷"is_ref"锟斤拷值锟斤拷锟斤拷FALSE
. 锟斤拷锟斤拷锟斤拷丫锟斤拷锟阶帮拷锟�» Xdebug锟斤拷锟斤拷锟斤拷通锟斤拷锟斤拷锟矫猴拷锟斤拷 xdebug_debug_zval()锟斤拷示"refcount"锟斤拷"is_ref"锟斤拷值锟斤拷
Example #2 锟斤拷示zval锟斤拷息
<?php
xdebug_debug_zval('a');
?>
锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�
a: (refcount=1, is_ref=0)='new string'
锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷值锟斤拷锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟矫达拷锟斤拷(refcount).
Example #3 锟斤拷锟斤拷一锟斤拷zval锟斤拷锟斤拷锟矫硷拷锟斤拷
<?php
$a = "new string";
$b = $a;
xdebug_debug_zval( 'a' );
?>
锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�
a: (refcount=2, is_ref=0)='new string'
锟斤拷时锟斤拷锟斤拷锟矫达拷锟斤拷锟斤拷2锟斤拷锟斤拷为同一锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 a 锟酵憋拷锟斤拷 b锟斤拷锟斤拷.锟斤拷没锟斤拷要时锟斤拷php锟斤拷锟斤拷去锟斤拷锟斤拷锟斤拷锟斤拷锟缴的憋拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷"refcount"锟斤拷锟�0时锟酵憋拷锟斤拷锟斤拷. 锟斤拷锟轿何癸拷锟斤拷锟斤拷某锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥憋拷锟斤拷锟诫开锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷(锟斤拷锟界:锟斤拷锟斤拷执锟叫斤拷锟斤拷)锟斤拷锟斤拷锟竭对憋拷锟斤拷锟斤拷锟斤拷锟剿猴拷锟斤拷 unset()时锟斤拷"refcount"锟酵伙拷锟�1锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷泳锟斤拷锟剿碉拷锟�:
Example #4 锟斤拷锟斤拷锟斤拷锟矫硷拷锟斤拷
<?php
$a = "new string";
$c = $b = $a;
xdebug_debug_zval( 'a' );
unset( $b, $c );
xdebug_debug_zval( 'a' );
?>
锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�
a: (refcount=3, is_ref=0)='new string' a: (refcount=1, is_ref=0)='new string'
锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟街达拷锟� unset($a);锟斤拷锟斤拷锟斤拷锟斤拷锟酵猴拷值锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷突锟斤拷锟节达拷锟斤拷删锟斤拷锟斤拷
锟斤拷锟斤拷锟斤拷锟斤拷 array锟斤拷object锟斤拷锟斤拷锟侥革拷锟斤拷锟斤拷锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷锟轿拷械愀达拷锟�. 锟斤拷 锟斤拷锟斤拷(scalar)锟斤拷锟酵碉拷值锟斤拷同锟斤拷array锟斤拷 object锟斤拷锟酵的憋拷锟斤拷锟斤拷锟斤拷锟角的筹拷员锟斤拷锟斤拷锟皆达拷锟斤拷锟皆硷拷锟侥凤拷锟脚憋拷锟叫★拷锟斤拷锟斤拷味锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷咏锟斤拷锟斤拷锟斤拷锟斤拷锟絲val锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
Example #5 Creating a array zval
<?php
$a = array( 'meaning' => 'life', 'number' => 42 );
xdebug_debug_zval( 'a' );
?>
锟斤拷锟斤拷锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷锟斤拷冢锟�
a: (refcount=1, is_ref=0)=array ( 'meaning' => (refcount=1, is_ref=0)='life', 'number' => (refcount=1, is_ref=0)=42 )
图示:
锟斤拷锟斤拷锟斤拷zval锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷: a锟斤拷meaning锟斤拷 number锟斤拷锟斤拷锟接和硷拷锟斤拷"refcount"锟侥癸拷锟斤拷锟斤拷锟斤拷锟斤拷岬斤拷锟揭伙拷锟�. 锟斤拷锟斤拷, 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟揭伙拷锟皆拷锟�,锟斤拷锟揭帮拷锟斤拷锟斤拷值锟斤拷为锟斤拷锟斤拷锟斤拷锟窖达拷锟斤拷元锟截碉拷值:
Example #6 锟斤拷锟揭伙拷锟斤拷丫锟斤拷锟斤拷诘锟皆拷氐锟斤拷锟斤拷锟斤拷锟�
<?php
$a = array( 'meaning' => 'life', 'number' => 42 );
$a['life'] = $a['meaning'];
xdebug_debug_zval( 'a' );
?>
锟斤拷锟斤拷锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷锟斤拷冢锟�
a: (refcount=1, is_ref=0)=array ( 'meaning' => (refcount=2, is_ref=0)='life', 'number' => (refcount=1, is_ref=0)=42, 'life' => (refcount=2, is_ref=0)='life' )
图示锟斤拷
锟斤拷锟斤拷锟较碉拷xdebug锟斤拷锟斤拷锟较拷锟斤拷锟斤拷强锟斤拷锟皆拷械锟斤拷锟斤拷锟皆拷睾锟斤拷锟斤拷锟接碉拷锟斤拷锟斤拷元锟截癸拷锟斤拷锟斤拷同一锟斤拷"refcount"2锟斤拷zval锟斤拷锟斤拷锟斤拷锟斤拷. 锟斤拷锟斤拷 Xdebug锟斤拷锟斤拷锟斤拷锟绞撅拷锟斤拷锟街滴�'life'锟斤拷 zval 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷实锟斤拷同一锟斤拷锟斤拷 锟斤拷锟斤拷xdebug_debug_zval()锟斤拷锟斤拷示锟斤拷锟斤拷锟较拷锟斤拷锟斤拷锟斤拷锟斤拷锟酵拷锟斤拷锟绞撅拷诖锟街革拷锟斤拷锟较拷锟斤拷锟斤拷锟斤拷锟�
删锟斤拷锟斤拷锟斤拷锟叫碉拷一锟斤拷元锟截o拷锟斤拷锟斤拷锟斤拷锟斤拷锟节达拷锟斤拷锟斤拷锟斤拷锟斤拷删锟斤拷一锟斤拷锟斤拷锟斤拷. 删锟斤拷锟斤拷,锟斤拷锟斤拷锟叫碉拷锟斤拷锟皆拷锟斤拷锟斤拷诘锟斤拷锟斤拷锟斤拷锟�"refcount"值锟斤拷锟劫o拷同锟斤拷锟斤拷锟斤拷"refcount"为0时锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷痛锟斤拷诖锟斤拷斜锟缴撅拷锟斤拷锟斤拷锟斤拷锟斤拷锟揭伙拷锟斤拷锟斤拷涌锟斤拷锟剿碉拷锟斤拷锟�
Example #7 锟斤拷锟斤拷锟斤拷锟斤拷删锟斤拷一锟斤拷元锟斤拷
<?php
$a = array( 'meaning' => 'life', 'number' => 42 );
$a['life'] = $a['meaning'];
unset( $a['meaning'], $a['number'] );
xdebug_debug_zval( 'a' );
?>
锟斤拷锟斤拷锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷锟斤拷冢锟�
a: (refcount=1, is_ref=0)=array ( 'life' => (refcount=1, is_ref=0)='life' )
锟斤拷锟节o拷锟斤拷锟斤拷锟斤拷锟斤拷锟揭伙拷锟斤拷锟斤拷楸撅拷锟斤拷锟轿拷锟斤拷锟斤拷锟斤拷锟皆拷锟绞憋拷锟斤拷锟斤拷锟酵憋拷锟斤拷锟饺わ拷锟斤拷赂锟斤拷锟斤拷咏锟剿碉拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟角硷拷锟斤拷锟斤拷锟斤拷锟矫诧拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷php锟斤拷锟斤拷锟斤拷一锟斤拷锟斤拷锟狡★拷
Example #8 锟斤拷锟斤拷锟斤拷锟斤拷为一锟斤拷元锟斤拷锟斤拷拥锟斤拷约锟�
<?php
$a = array( 'one' );
$a[] =& $a;
xdebug_debug_zval( 'a' );
?>
锟斤拷锟斤拷锟斤拷锟教碉拷锟斤拷锟斤拷锟斤拷锟斤拷冢锟�
a: (refcount=2, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)='one', 1 => (refcount=2, is_ref=1)=... )
图示锟斤拷
锟杰匡拷锟斤拷锟斤拷锟斤拷锟斤拷锟� (a) 同时也锟斤拷锟斤拷锟斤拷锟斤拷锟侥第讹拷锟斤拷元锟斤拷(1) 指锟斤拷谋锟斤拷锟斤拷锟斤拷锟斤拷锟�"refcount"为 2锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷械锟�"..."说锟斤拷锟斤拷锟斤拷锟剿递癸拷锟斤拷锟�, 锟斤拷然锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟轿讹拷锟�"..."指锟斤拷原始锟斤拷锟介。
锟斤拷锟秸革拷一锟斤拷锟斤拷锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷unset锟斤拷锟斤拷删锟斤拷锟斤拷锟斤拷锟斤拷牛锟斤拷锟斤拷锟街革拷锟侥憋拷锟斤拷锟斤拷锟斤拷锟叫碉拷锟斤拷锟矫达拷锟斤拷也锟斤拷1锟斤拷锟斤拷锟皆o拷锟斤拷锟斤拷锟斤拷锟斤拷锟街达拷锟斤拷锟斤拷锟斤拷锟侥达拷锟斤拷螅员锟斤拷锟�$a锟斤拷锟斤拷unset, 锟斤拷么锟斤拷锟斤拷 $a 锟斤拷锟斤拷锟斤拷元锟斤拷 "1" 锟斤拷指锟斤拷谋锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷么锟斤拷锟斤拷锟�1, 锟斤拷"2"锟斤拷锟�"1". 锟斤拷锟斤拷锟斤拷锟斤拷说锟斤拷:
Example #9 Unsetting $a
(refcount=1, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)='one', 1 => (refcount=1, is_ref=1)=... )
图示锟斤拷
锟斤拷锟杰诧拷锟斤拷锟斤拷某锟斤拷锟斤拷锟斤拷锟斤拷锟叫碉拷锟轿何凤拷锟斤拷指锟斤拷锟斤拷锟斤拷峁�(锟斤拷锟角憋拷锟斤拷锟斤拷锟斤拷)锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷元锟斤拷"1"锟斤拷然指锟斤拷锟斤拷锟介本锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷鼙锟斤拷锟斤拷 锟斤拷锟斤拷为没锟斤拷锟斤拷锟斤拷姆锟斤拷锟街革拷锟斤拷锟斤拷锟斤拷没锟矫伙拷邪旆拷锟斤拷锟斤拷锟斤拷峁癸拷锟斤拷锟斤拷锟酵会导锟斤拷锟节达拷泄漏锟斤拷锟斤拷锟揭碉拷锟角o拷php锟斤拷锟节脚憋拷执锟叫斤拷锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷锟捷结构锟斤拷锟斤拷锟斤拷锟斤拷php锟斤拷锟街帮拷锟斤拷锟斤拷姆巡锟斤拷锟斤拷诖妗o拷锟斤拷锟斤拷要实锟街凤拷锟斤拷锟姐法锟斤拷锟斤拷锟斤拷要锟斤拷锟斤拷锟斤拷锟斤拷一锟斤拷锟斤拷元锟斤拷指锟斤拷锟斤拷锟侥革拷元锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟介,锟斤拷锟斤拷锟斤拷锟斤拷突峋拷锟斤拷锟斤拷锟斤拷锟斤拷锟饺伙拷锟酵拷锟斤拷锟斤拷锟斤拷也锟结发锟斤拷锟节讹拷锟斤拷锟较o拷实锟斤拷锟较讹拷锟斤拷锟斤拷锌锟斤拷艹锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷为锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷式锟侥憋拷锟斤拷锟矫★拷
锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟揭伙拷锟斤拷蔚锟矫皇裁达拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟街硷拷千锟轿o拷锟斤拷锟斤拷锟斤拷十锟斤拷蔚锟斤拷诖锟叫孤╋拷锟斤拷锟斤拷锟饺伙拷歉锟斤拷锟斤拷锟斤拷狻o拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷诔锟绞憋拷锟斤拷锟斤拷械慕疟锟斤拷校锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟较诧拷锟斤拷锟斤拷锟斤拷锟斤拷鼗锟斤拷锟斤拷锟�(deamons)锟斤拷锟竭碉拷元锟斤拷锟斤拷锟叫的达拷锟斤拷准锟�(sets)锟叫★拷锟斤拷锟竭碉拷锟斤拷锟接o拷锟节革拷锟睫达拷锟絜Z(一锟斤拷知锟斤拷锟斤拷PHP Library) 锟斤拷锟斤拷锟斤拷模锟斤拷锟斤拷锟斤拷锟斤拷锟皆拷锟斤拷锟绞憋拷锟斤拷涂锟斤拷芑锟斤拷锟斤拷锟斤拷锟解。锟斤拷时锟斤拷锟皆匡拷锟斤拷锟斤拷要锟斤拷锟斤拷2GB锟斤拷锟节存,锟斤拷锟斤拷锟皆凤拷锟斤拷锟斤拷锟杰匡拷锟斤拷没锟斤拷锟斤拷么锟斤拷锟斤拷诖妗�