Dubluve.net » php print backtrace http://www.dubluve.net Biz de yazılımcıyız Sun, 31 Aug 2014 13:17:32 +0000 tr-TR hourly 1 http://wordpress.org/?v=3.9.1 php debug_backtrace fonksiyonu http://www.dubluve.net/2012/08/18/php-debug_backtrace-fonksiyonu/ http://www.dubluve.net/2012/08/18/php-debug_backtrace-fonksiyonu/#comments Sat, 18 Aug 2012 12:16:46 +0000 http://dubluve.net/?p=1728 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.

]]>
http://www.dubluve.net/2012/08/18/php-debug_backtrace-fonksiyonu/feed/ 7