debug_zval_dump

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

debug_zval_dumpDahili bir zend değerinin dizgesel gösterimini çıktıya dökümler

Açıklama

debug_zval_dump ( mixed $değişken ) : void

Dahili bir zend değerinin dizgesel gösterimini çıktıya dökümler.

Değiştirgeler

değişken

İşleme alınacak değişken.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Ö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.

Ayrıca Bakınız