dubug_backtrace
PHP'de debug_backtrace() fonksiyonu, çalıştırıldığı yere kadar çalışan tüm metodları, bunların argümanlarını kullanılan nesneleri classları, çalışan dosyanın tam yolunu vs bilgileri bize
array olarak veren bir metoddur. Adı üzerinde, backtrace'leri debug ediyor :) Örnek olarak hazırladığım 2 adet php sayfası var. Bunlardan biri
default.php diğeri
start.php. Biraz karmaşık gibi görünebilir, debug_backtrace fonksiyonunun ne işe yaradığını gösterebilmek için tünel kazarak fonkisyondan nesne yaratıp metodlara gittim start.php içeriği şöyle;
< ?php require_once 'default.php'; start("dubluve", "dubluve.net"); function start($param1, $param2){ $default = new DefaultClass($param1); $default->deneme(); } ?>
Burada default.php sayfasını require_once ile aldık, daha sanra start(); fonksiyonunu çalıştırdık. start(); fonksiyonu içerisinde ise DefualtClass için bir nesne yarattık, ardından da deneme(); metodunu çalıştırdık. default.php içeriği şöyle;
< ?php class DefaultClass{ protected $_var = "a"; private $_var2 = "b"; public $value = "c"; public function __construct($param){ } public function deneme(){ $this->_defaultDebug($this->_var); } protected function _defaultDebug(){ $result = debug_backtrace(); print_r($result); } } ?>
Burada da DefaultClass clasımız var. Bu class için nesne yarattığımızda çalışan __construct metodu 1 adet parametre alıyor. Ardından çalıştırdığımız deneme(); metodu ise protected olan _defaultDebug(); metodunu çağırıyor. Burada da dubug_backtrace yapıyoruz. Ayrıca DefaultClass classında 3 adet property var. Şimdi bakalım bunun sonucuna;
Array ( [0] => Array ( [file] => A:\deneme\default.php [line] => 13 [function] => _defaultDebug [class] => DefaultClass [object] => DefaultClass Object ( [_var:protected] => a [_var2:DefaultClass:private] => b [value] => c ) [type] => -> [args] => Array ( [0] => a ) ) [1] => Array ( [file] => A:\deneme\start.php [line] => 8 [function] => deneme [class] => DefaultClass [object] => DefaultClass Object ( [_var:protected] => a [_var2:DefaultClass:private] => b [value] => c ) [type] => -> [args] => Array ( ) ) [2] => Array ( [file] => A:\deneme\start.php [line] => 4 [function] => start [args] => Array ( [0] => dubluve [1] => dubluve.net ) ) )
Sonuç olarak dönen array içinde 3 adet array var, gelin bunları tek tek inceleyelim.
- İlk arrayimiz, dubug_backtrace(); metodun içinde olduğu _defaultDebug metodunun çağırıldığı yer. yani deneme(); metodunun içerisi. [file] parametresinde bu metodu çağıran yerin tam yolu, [line] parametresinde ise o dosyada kaçıncı satırda çağırıldığı bilgisi var. [function] parametresinde de çağırılan metod var. Bu metodun içerisinde bulunduğu class [class] parametresinin içerisinde. [object] parametresi içerisinde de, nesnemiz ve bunun içerisindeki propertyler yer almakta. [arg] içerisinde de argümanlar mevcut.
- İkinci arrayimizde ise, ilk arrayde çalışan metodun çağırıldığı yer var. yani deneme(); metodunun çağırıldığı yer. Biz deneme metodunu, start.php içerisinde bir nesne yaratarak çağırmıştık, diğer argümanlara baktığımızda bunu da görebiliyoruz.
- Son arrayimizde ise start.php içerisinde çağırdığımız start(); fonksiyonu yer almakta, çünkü biz ilk oalrak bunu çağırdık. Burada argümanlarını da açıkca görebiliyoruz.
Gelen sonuçlarda [file] parametresindeki dosyanın tam yolunun, include işlemlerinde de işimize yarayabileceğini düşünüyorum.
debug_print_backtrace
debug_print_backtrace(); fonksyionu da debug_backtrace ile hemen hemen aynı işi yapmakta. Farkları, debug_backtrace kadar fazla detay vermemesi, ve geriye hiç birşey döndürmemesi. Geriye hiç birşey return etmiyor, sonucu direk ekrana basıyor. Şöyle ki, yukarıda verdiğim örnekteki _defaultDebug(); metodu böyleyken;
protected function _defaultDebug(){ $result = debug_backtrace(); print_r($result); }
şu hale getirirseniz;
protected function _defaultDebug(){ debug_print_backtrace(); }
debug_print_backtrace metodunun verdiği sonucu da görmüş olursunuz. Verdiğim örnekte aşağıdaki sonucu aldım;
#0 DefaultClass->_defaultDebug() called at [A:\deneme\default.php:13] #1 DefaultClass->deneme() called at [A:\deneme\start.php:8] #2 start(dubluve, dubluve.net) called at [A:\deneme\start.php:4]
Görüldüğü üzere çalışan metodları ve nereden çağırıldıklarını listelemekte. Devamı için :
php debug_backtrace fonksiyonu
Hiç yorum yok:
Yorum Gönder
Yorumunuzu esirgemeyiniz..