debug_zval_dump

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

debug_zval_dumpDahili zval yapısının dizgesel gösterimini çıktıya dökümler

Açıklama

debug_zval_dump ( mixed $değer , mixed ...$değerler ) : void

Dahili bir zval yapısının (zend değerinin) dizgesel gösterimini çıktıya dökümler. Zend motorunun veya bir PHP eklentisinin gerçeklenim ayrıntılarının hatalarını ayıklamak veya anlamak için bu yöntem oldukça kullanışlıdır.

Değiştirgeler

değer

Dökümlenecek değişken veya değer.

values

Dökümlenecek değişkenler veya değerler.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - debug_zval_dump() örneği

<?php
$var1 
'Hello';
$var1 .= ' World';
$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ğeri, motorun gerçeklenimi ayrıntılı bir şekilde anlaşılmadan şaşırtıcı olabilir.

Zend motoru gönderim sayısını (refcount) iki farklı amaç için kullanır:

  • Aynı değeri tutan birden çok değişkenin bellekteki aynı kopyayı işaret ettiği "yazarken kopyala" adı verilen bir teknik kullanarak bellek kullanımını en iyileme. Değişkenlerden herhangi biri değiştirildiğinde, bellekte yeni bir kopyaya işaret edilir ve özgün kopya üzerindeki gönderim sayısı 1 azaltılır.
  • Gönderimle atanmış veya aktarılmış izleme değişkenleri (bkz. Gönderimlerle İlgili Herşey ). Bu gönderim sayısı, geçerli değer için zval'i işaret eden ayrı bir gönderim zval'ı üzerinde saklanır. Bu ek zval şu anda debug_zval_dump() tarafından gösterilmemektedir.

debug_zval_dump() girdisini değeriyle aktarılan normal değiştirgeler olarak aldığından, bunları aktarmak için "yazarken kopyala" tekniğini kullanacaktır: verileri kopyalamak yerine, işlev çağrısının ömrü boyunca gönderim sayısını bir artıracaktır. İşlev, değiştirgeyi aldıktan sonra değiştirseydi, bir kopyası yapılırdı; öyle olmadığından, gösterilen gönderim sayısı çağrı etki alanındakinden bir fazla olur.

Değiştirge aktarımı ayrıca, gönderimle atanan değişkenleri debug_zval_dump() işlevinin göstermesini de önler. Örneklerle açıklamak gerekirse, yukarıdaki örneğin biraz değiştirilmiş bir halini ele alalım:

<?php
$var1 
'Hello';
$var1 .= ' World';
// Aynı değere gönderim olarak üç değişkene vurgu yapalım
$var2 =& $var1;
$var3 =& $var1;

debug_zval_dump($var1);
?>

Yukarıdaki örneğin çıktısı:

string(11) "Hello World" refcount(2)

$var1, $var2 ve $var3 gönderim olarak ilintili olsa da, debug_zval_dump() işlevine yalnızca bir değer aktarılır. Bu değer, bir kez gönderim kümesi tarafından ve bir kez de debug_zval_dump() içinde kullanılır, bu nedenle gönderim sayısı (refcount) 2 olur.

Motorda farklı veri türleri için yapılan en iyilemeler nedeniyle daha fazla karışıklık ortaya çıkar. Tamsayılar gibi bazı türler "yazarken kopyala" kullanmazlar, bu nedenle bir refcount gösterilmez. Diğer durumlarda, refcount dahili olarak kullanılan fazladan kopyaları da gösterir, örneğin bir sayıl dize veya dizinin bir göstericiyle saklanması gibi.

Ayrıca Bakınız

add a note add a note

User Contributed Notes 1 note

up
1
Hayley Watson
1 year ago
If you're finding the interpretation of refcount confusing, the Xdebug extension offers a function similar to this one, but because the variable name is passed as a string, xdebug_debug_zval() doesn't scribble on the refcount with its own references to the zval.
To Top