18 Ağustos 2012 Cumartesi

php debug_backtrace fonksiyonu

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..