array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'function.debug-zval-dump.php', 1 => 'debug_zval_dump', ), 'up' => array ( 0 => 'ref.var.php', 1 => 'Değişkenlerle ilgili işlevler', ), 'prev' => array ( 0 => 'function.boolval.php', 1 => 'boolval', ), 'next' => array ( 0 => 'function.doubleval.php', 1 => 'doubleval', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'reference/var/functions/debug-zval-dump.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
debug_zval_dump — Dahili zval yapısının dizgesel gösterimini çıktıya dökümler
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ğer
Dökümlenecek değişken veya değer.
values
Dökümlenecek değişkenler veya değerler.
Hiçbir değer dönmez.
Ö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 bağımsız değişkenler 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, bağımsız değişkeni 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.
Bağımsız değişken 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.