(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
debug_zval_dump — Dahili bir zend değerinin dizgesel gösterimini çıktıya dökümler
Dahili bir zend değerinin dizgesel gösterimini çıktıya dökümler.
değişken
İşleme alınacak değişken.
Hiçbir değer dönmez.
Örnek 1 - debug_zval_dump() örneği
<?php
$var1 = 'Hello World';
$var2 = '';
$var2 =& $var1;
debug_zval_dump(&$var1);
?>
Yukarıdaki örneğin çıktısı:
&string(11) "Hello World" refcount(3)
Bilginize:
refcount
hakkında
Bu işlevden döndürülen
refcount
değerinin ne olduğu bazı durumlarda pek açık değildir. Örneğin bir geliştirici yukarıdaki örneğinrefcount
değerinin2
olacağını bekleyebilirdi. Üçüncü gönderim aslında debug_zval_dump() çağrılırken oluşur.Bu davranış, bir değişken debug_zval_dump() işlevine gönderimli aktarılmadığı takdirde daha da karmaşıklaşır. Bunu göstermek için yukardaki örneğin hafifçe değiştirilmiş bir sürümünü ele alalım:
<?php
$var1 = 'Hello World';
$var2 = '';
$var2 =& $var1;
debug_zval_dump($var1); // bu sefer gönderimli aktarmadık
?>Yukarıdaki örneğin çıktısı:
string(11) "Hello World" refcount(1)Neden
refcount(1)
? Çünkü$var1
değişkeni işlev çağrılırken kopyalandı.Bu işlev, 1
refcount
'lu bir değişken değeriyle aktarıldığında işleri daha da karmaşıklaştırır:
<?php
$var1 = 'Hello World';
debug_zval_dump($var1);
?>Yukarıdaki örneğin çıktısı:
string(11) "Hello World" refcount(2)Buradaki
2
'likrefcount
neredeyse kesinlikle apaçık değildir. Özellikle yukarıdaki örnekler göz önüne alınarak. Peki ne oluyor?Bir değişken tek bir gönderime sahipse (debug_zval_dump() işlevinde bir değiştirge olarak kullanılmadan önce,
$var1
'de olduğu gibi), PHP motoru, aktarılan gönderim yazılacaksa sadece yazma anında bir kopyasının yapılacağı ikazıyla bunu bir işleve aktarılmış gibi eniyileştirir. Buna "yazma sırasında kopyalama" denir.Eğer debug_zval_dump() işlevi kendi tek değiştirgesine yazarsa (ki normalde yazmaz) bu durumda (bellekte bu parametre için) bir kopya oluşturulur. O zamana kadar bu değiştirge bir gönderim olarak kalır ve işlev çağrısının etki alanı içinde
refcount
değeri2
'ye yükseltilir.