(PHP 4 >= 4.2.0, PHP 5)
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ğin refcount değerinin 2 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'lik refcount 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ğeri 2'ye yükseltilir.