Değişkenleri Dökme
Hata ayıklayan herkes, bir değişken hakkında ayrıntılı bilgi yazdıran var_dump
fonksiyonunu bilir. Ne yazık ki çıktısında HTML biçimlendirmesi yoktur ve tek satıra birleşir; HTML kaçışlama
sorunlarından söz bile etmiyoruz. Pratikte var_dump fonksiyonunu daha elverişli bir fonksiyonla değiştirmek
gerekir. O fonksiyon dump()'tır.
$arr = [10, 20.2, true, null, 'hello'];
dump($arr);
// ya da Debugger::dump($arr);
şu çıktıyı üretir:

Varsayılan açık temayı koyuya çevirebilirsiniz:
Debugger::$dumpTheme = 'dark';

İç içe geçme derinliğini Debugger::$maxDepth ile, gösterilen dizelerin uzunluğunu Debugger::$maxLength ile, gösterilen dizi ya da nesne öğelerinin sayısını ise Debugger::$maxItems ile de değiştirebilirsiniz. Doğal olarak düşük değerler render'ı hızlandırır.
Debugger::$maxDepth = 2; // varsayılan: 15
Debugger::$maxLength = 50; // varsayılan: 150
Debugger::$maxItems = 50; // varsayılan: 100
dump() fonksiyonu, çağrıldığı yeri ve nesnelerde sınıflarının tanımlandığı dosyanın yolunu da
gösterebilir. Bunu Debugger::$showLocation özelliği
denetler:
Debugger::$showLocation = true; // konum bilgisini gösterir
Debugger::$showLocation = false; // gizler
Daha ince denetim için Tracy\Dumper::dump() metodunu doğrudan çağırın ve Dumper::LOCATION
seçeneğine Dumper::LOCATION_CLASS (yalnızca sınıfların tanımlandığı yer) ya da
Dumper::LOCATION_SOURCE (ayrıca dump() çağrısının yapıldığı yer) değerini verin.
dump() fonksiyonunun pratik alternatifleri dumpe() (dump & exit) ve bdump()'tır.
İkincisi, değişken değerlerini Tracy Bar panelinde dökmemizi sağlar. Bu çok elverişlidir; çünkü dökümler sayfa
yerleşiminden ayrıdır ve onlara başlık da ekleyebiliriz.
bdump([2, 4, 6, 8], 'ona kadar çift sayılar');
bdump([1, 3, 5, 7, 9], 'ona kadar tek sayılar');

Tracy\Dumper'ı Doğrudan Kullanma
dump() fonksiyonunun arkasında, doğrudan da kullanabileceğiniz Tracy\Dumper sınıfı vardır.
dump() fonksiyonunun aksine Debugger sınıfına dayanmaz ve tüm ayarlarını bir seçenek dizisinden
alır; bu da onu bağımsız betikler, CLI araçları ya da dökümü dize olarak istediğiniz her durum için kullanışlı
kılar. Ayarlar Debugger yerine diziden geldiğinden varsayılanlar biraz farklıdır: örneğin derinlik
15 yerine 7'dir.
Metotlar dökümü dize olarak döndürür:
use Tracy\Dumper;
$html = Dumper::toHtml($var, [Dumper::DEPTH => 3]); // tarayıcı için HTML
$text = Dumper::toText($var); // düz metin, örneğin günlük için
$ansi = Dumper::toTerminal($var); // terminal için ANSI renkli metin
Ya da değişkeni, ortama göre HTML mi terminal çıktısı mı vereceğini otomatik seçen Dumper::dump() ile
doğrudan yazdırın:
Dumper::dump($var, [Dumper::DEPTH => 3]);
HTML çıktısı küçük bir stil sayfası ve betik gerektirir. Tracy'nin etkin olduğu bir uygulamanın
dışında (yani Debugger::enable() olmadan) döküm yaparken, bunları sayfa başlığında bir kez
Dumper::renderAssets() ile yazdırın. Dumper::dump() bunu kendisi yapar, ama toHtml()
yapmaz.
Seçenekler
Çıktıyı, yukarıdaki tüm metotlara aktarılan bir seçenek dizisi denetler:
| Seçenek | Açıklama | Varsayılan |
|---|---|---|
Dumper::DEPTH |
en fazla iç içe geçme derinliği | 7 |
Dumper::TRUNCATE |
dizelerin en fazla uzunluğu | 150 |
Dumper::ITEMS |
bir dizi/nesnede gösterilecek en fazla öğe sayısı | 100 |
Dumper::COLLAPSE |
üst düğüm katlansın mı? true/false ya da en az bu kadar öğesi olunca katla |
14 |
Dumper::COLLAPSE_COUNT |
iç içe bir düğüm en az bu kadar öğesi olunca katlansın | 7 |
Dumper::LOCATION |
konumu göster; true/false ya da Dumper::LOCATION_CLASS (yalnızca sınıfların
tanımlandığı yer) veya Dumper::LOCATION_SOURCE (ayrıca çağrı yeri) |
kapalı |
Dumper::THEME |
renk teması, light ya da dark |
light |
Dumper::HASH |
nesne ID'leri (# işareti) ve referanslar (& işareti) gösterilsin mi? |
true |
Dumper::DEBUGINFO |
nesnenin sihirli __debugInfo() metodu kullanılsın mı? |
false |
Dumper::KEYS_TO_HIDE |
değerleri ***** olarak gizlenecek anahtar adlarının dizisi |
[] |
Dumper::SCRUBBER |
hassas değerler için true döndüren fn(string $key, mixed $value, ?string $class): bool
callback'i |
yok |
Dumper::OBJECT_EXPORTERS |
nesnelerin özel render'ı, aşağıya bakın | [] |
COLLAPSE, COLLAPSE_COUNT ve THEME seçenekleri yalnızca etkileşimli HTML
çıktısında geçerlidir.
SCRUBBER seçeneği hassas değerleri dökümden gizler; tam bir örnek için bkz. Özel scrubber.
Örneğin nesne hash'leri olmadan derli toplu bir döküm almak için:
echo Dumper::toText($var, [Dumper::HASH => false]);
toTerminal() metodunun kullandığı ANSI renkleri Dumper::$terminalColors ile
özelleştirilebilir.
Nesnelerin Özel Render'ı
Dumper, bir nesneyi varsayılan olarak özelliklerini listeleyerek render eder. Bazen bu en yararlı görünüm değildir;
örneğin bir PhpToken, türünü okunabilir bir ad yerine sayısal bir ID olarak gösterir.
Dumper::$objectExporters içine bir exporter kaydederek dumper'a belirli bir sınıfı nasıl render edeceğini
öğretebilirsiniz:
use Tracy\Dumper;
Dumper::$objectExporters[PhpToken::class] = function (PhpToken $token, Dumper\Value $value): void {
$value->value = $token->getTokenName() . ' ' . $token->text;
};
Exporter, nesneyi ve onun nasıl gösterileceğini anlatan bir Tracy\Dumper\Value nesnesini alır.
$value->value özelliğine atama yapmak, başlığı (varsayılan olarak sınıf adını) kendi metninizle
değiştirir; böylece özellik listesi yerine derli toplu, okunabilir bir etiket elde edersiniz. Ayar, o sınıfın her
dökümünde, hatta dizilerin ya da başka nesnelerin içine gömülü nesnelerde bile geçerlidir. Alternatif olarak,
exporter'ları yalnızca tek bir çağrı için Tracy\Dumper::dump() metodunun Dumper::OBJECT_EXPORTERS
seçeneğiyle aktarabilirsiniz.