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

void debug_zval_dump ( mixed $değişken )

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

add a note add a note

User Contributed Notes 2 notes

up
9
Anonymous
1 year ago
"Fatal error: Call-time pass-by-reference has been removed ..." since PHP 5.something. So the Example #1 is now invalid PHP code.
up
9
AmberBlackthorn
7 years ago
The add of "Call-time pass-by-reference" as E_DEPRECATED makes it impossible to get the real refcount without getting an error, since <?php error_reporting(E_ALL ^ E_DEPRECATED); ?> and even <?php @debug_zval_dump(&$foo); ?> doesn't change anything.
To Top