There seems to be no way to inspect the reference count of a specific class variable but you can view the reference count of all variables in the current class instance with xdebug_debug_zval('this');ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ PHP Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ zval (Π°Π½Π³Π». ΡΠΎΠΊΡ.: Zend Value β Zend-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅). ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ zval, ΠΊΡΠΎΠΌΠ΅ ΡΠΈΠΏΠ° ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π±ΠΈΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠ΅ΡΠ²ΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ is_ref (Π°Π½Π³Π». ΡΠΎΠΊΡ.: Is Reference β ΡΡΡΠ»ΠΊΠ° Π»ΠΈ?) ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π²ΠΊΠ»ΡΡΠΈΠ» Π»ΠΈ PHP ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² Β«Π½Π°Π±ΠΎΡ ΡΡΡΠ»ΠΎΠΊΒ» ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΠ° ΡΡΡΡ Π±ΠΈΡΠ° is_ref PHP-Π΄Π²ΠΈΠΆΠΎΠΊ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΎΡΠ»ΠΈΡΠ°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΡ ΡΡΡΠ»ΠΎΠΊ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ PHP ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ &, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ zval ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ΡΡΡΡΠ° ΡΡΡΠ»ΠΎΠΊ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΎΡΠ°Ρ ΡΠ°ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ refcount (Π°Π½Π³Π». ΡΠΎΠΊΡ.: Reference Counter β ΡΡΡΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ) ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ β ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΡΡΠΎΡ zval-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². PHP ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΡΠΈ Π·Π°ΠΏΡΠΎΡΠ΅ ΠΈΠ· Π±ΡΠ°ΡΠ·Π΅ΡΠ°, ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ zval ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΡΠΈΠΌΠ΅Ρ #1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° zval
<?php
$a = "new string";
?>
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ "a"
ΠΈ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ ΡΠΈΠΏΠΎΠΌ string ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ new string.
ΠΠΈΡ is_ref ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ°Π²Π½ΡΠΌ false, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ
ΡΡΡΠ»ΠΊΠΈ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΆΠ΅ Π±ΠΈΡΠ° refcount Π·Π°Π΄Π°ΡΡΡΡ ΡΠ°Π²Π½ΡΠΌ 1, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ
PHP ΡΠ²ΡΠ·Π°Π» ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ». ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, zval-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ true Π² Π±ΠΈΡΠ΅ is_ref
ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 1 Π² Π±ΠΈΡΠ΅ refcount Π΄Π²ΠΈΠΆΠΎΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΏΡΡΡΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ Π±ΠΈΡΠ° is_ref Π·Π½Π°ΡΠ΅Π½ΠΈΡ false. ΠΠΎΠ΄ΡΠ»Ρ Β»Β Xdebug
ΡΠΌΠ΅Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ xdebug_debug_zval().
ΠΡΠΈΠΌΠ΅Ρ #2 ΠΡΠ²ΠΎΠ΄ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ zval-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅
<?php
$a = "new string";
xdebug_debug_zval('a');
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
a: (refcount=1, is_ref=0)='new string'
ΠΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΡΡΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ.
ΠΡΠΈΠΌΠ΅Ρ #3 Π£Π²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΡΡΡΠΈΠΊΠ° ΡΡΡΠ»ΠΎΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° zval
<?php
$a = "new string";
$b = $a;
xdebug_debug_zval('a');
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
a: (refcount=2, is_ref=0)='new string'
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΡΡΠΈΠΊΠ° ΡΡΡΠ»ΠΎΠΊ Π·Π΄Π΅ΡΡ ΡΠ°Π²Π½ΠΎ 2, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ
ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ PHP ΡΠ²ΡΠ·Π°Π» ΠΊΠ°ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»
a, ΡΠ°ΠΊ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ» b. PHP Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΌΡΠ½, ΡΡΠΎΠ±Ρ
Π½Π΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΏΠΎΠΊΠ° ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ
ΡΡΡΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ refcount ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°Π²Π½ΡΠΌ Π½ΡΠ»Ρ, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ.
Π‘ΡΡΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ refcount ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΠΌΠ²ΠΎΠ», ΠΊΠΎΡΠΎΡΡΠΉ PHP ΡΠ²ΡΠ·Π°Π» Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ,
Π²ΡΡ
ΠΎΠ΄ΠΈΡ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ),
ΠΈΠ»ΠΈ ΠΏΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ unset()).
ΠΡΠΈΠΌΠ΅Ρ #4 Π£ΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΡΡΠΈΠΊΠ° ΡΡΡΠ»ΠΎΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° zval
<?php
$a = "new string";
$c = $b = $a;
xdebug_debug_zval('a');
$b = 42;
xdebug_debug_zval('a');
unset( $c );
xdebug_debug_zval('a');
?>Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
a: (refcount=3, is_ref=0)='new string' a: (refcount=2, is_ref=0)='new string' a: (refcount=1, is_ref=0)='new string'
ΠΡΠ·ΠΎΠ² unset($a); Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅
ΡΠ΄Π°Π»ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΠΏ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² (array) ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (object) ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅ΡΡΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ»ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π² ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΊΠ°Π»ΡΡΠ½ΡΡ (scalar) Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°Π·Ρ ΡΡΠΈ zval-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°:
ΠΡΠΈΠΌΠ΅Ρ #5 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ zval-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° (array)
<?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 )
ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ:
PHP ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΈ zval-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π΄Π»Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²: a, meaning ΠΈ number. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΡΠ»ΠΎΠΊ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ² Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°:
ΠΡΠΈΠΌΠ΅Ρ #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 Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΊΠ°ΠΊ ΡΡΠ°ΡΡΠΉ, ΡΠ°ΠΊ ΠΈ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°
ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° zval-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ refcount ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°Π²Π½ΠΎ 2.
Π₯ΠΎΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»Ρ Xdebug ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π΄Π²Π° zval-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 'life',
ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ. Π€ΡΠ½ΠΊΡΠΈΡ xdebug_debug_zval() Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ,
Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π²ΡΠ²ΠΎΠ΄ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ.
ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ: ΡΡΡΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ refcount ΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ. ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΡΠ΅ refcount Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ Π½ΡΠ»Ρ. ΠΡΠΈΠΌΠ΅Ρ:
ΠΡΠΈΠΌΠ΅Ρ #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' )
Π‘ΠΈΡΡΠ°ΡΠΈΡ ΡΡΠ°Π½Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅, Π΅ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠ°ΠΌ Π² ΡΠ΅Π±Ρ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²Π²ΠΎΠ΄ΠΈΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅, ΡΡΠΎΠ±Ρ PHP Π½Π΅ ΡΠΎΠ·Π΄Π°Π» ΠΊΠΎΠΏΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΡΠΈΠΌΠ΅Ρ #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 ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $a ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΡΡΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ $a ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 1, ΡΠΌΠ΅Π½ΡΡΠΈΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ, Ρ 2 Π΄ΠΎ 1:
ΠΡΠΈΠΌΠ΅Ρ #9 Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ²Π° $a
(refcount=1, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)='one', 1 => (refcount=1, is_ref=1)=... )
ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ:
Π₯ΠΎΡΡ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΡΡΡΠΊΡΡΡΡ Π½Π΅Π»ΡΠ·Ρ ΠΎΡΠΈΡΡΠΈΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Ρ ΠΊΠ»ΡΡΠΎΠΌ 1 ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΠΎΡ ΠΆΠ΅ ΠΌΠ°ΡΡΠΈΠ². ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π° ΡΡΡΡΠΊΡΡΡΡ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ», ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΎΡΠΈΡΡΠΊΠ° ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ; ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΡΠ΅ΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΡΠ°ΡΡΡΡ, PHP ΠΎΡΠΈΡΡΠΈΡ ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΠ°, Π½ΠΎ Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠ΅Π½Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π² ΠΏΠ°ΠΌΡΡΠΈ. Π’Π°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ Π²Π΅ΡΠ΅ΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠ΅. Π‘ Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΡΠΈΡΡΠ°ΡΠΈΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠ·ΡΠΊ Π½Π΅ΡΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Β«ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅Β».
ΠΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ΅ ΡΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ°Π· ΠΈΠ»ΠΈ Π΄Π²Π°, Π½ΠΎ ΠΏΡΠΈ ΡΡΡΡΡΠ΅ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π΅ ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°Π΅Π² ΡΡΠ΅ΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΡΠΆΠ΅ ΡΡΠ°Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΡΠΊΡΠΈΠΏΡΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΠΎΠ»Π³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π΄Π΅ΠΌΠΎΠ½Π°Ρ , Π² ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡ Π½Π΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΈΠ»ΠΈ Π² ΠΊΡΡΠΏΠ½ΡΡ Π½Π°Π±ΠΎΡΠ°Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ². ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ Π²ΡΠ·Π²Π°Π» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ² Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Template Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ez Components. Π ΡΡΠ΄Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π±ΠΎΠ»ΡΡΠ΅ 2 ΠΠ ΠΏΠ°ΠΌΡΡΠΈ, Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ.
There seems to be no way to inspect the reference count of a specific class variable but you can view the reference count of all variables in the current class instance with xdebug_debug_zval('this');Result of "Example #8 Adding the array itself as an element of it self" will be another for PHP7:
a: (refcount=2, is_ref=1)=array (
0 => (refcount=2, is_ref=0)='one',
1 => (refcount=2, is_ref=1)=...
)
insted of:
a: (refcount=2, is_ref=1)=array (
0 => (refcount=1, is_ref=0)='one',
1 => (refcount=2, is_ref=1)=...
)
Internal value representation in PHP 7:
https://nikic.github.io/2015/05/05/Internal-value-representation-in-PHP-7-part-1.htmlIf a variable is not present in the current scope xdebug_debug_zvalγwill return null.$a = 'new string';
$b = 1;
xdebug_debug_zval('a');
xdebug_debug_zval('b');
ouputs with PHP 7.3.12 (cli)
a: (interned, is_ref=0)='new string'
b: (refcount=0, is_ref=0)=1my php versoin : HP 7.1.25 (cli) (built: Dec 7 2018 08:20:45) ( NTS )
$a = 'new string';
$b = 1;
xdebug_debug_zval('a');
xdebug_debug_zval('b');
output:
a: (refcount=2, is_ref=0)='new string'
b: (refcount=0, is_ref=0)=1
if $a is a string value, 'refcount' equal 2 by defalut.my php version is PHP 7.1.6 (cli), when I run
$a = 'new string';
$b = 1;
xdebug_debug_zval('a');
xdebug_debug_zval('b');
it shows:
a: (refcount=0, is_ref=0)='new string'
b: (refcount=0, is_ref=0)=1