TurkProgrammers.NeT
Ana sayfa Ana Sayfa | Ana sayfanız yapın | Sık kullanılanlara ekle | Rss/Rdf Besleme| JavaScript
Bölümler
Arşiv
paz sa ça cu cum pa
1234
567891011
12131415161718
19202122232425
262728293031

Mailinizi ekleyin
Haberlere abone olun:

anket: Web Programcılığının Geleceğini nasıl görüyorsunuz
Web Programcılığının Geleceğini nasıl görüyorsunuz?
Önü Fazlası ile açık
ilerde yapacak web sitesi kalmayacak
Hazır sistemler işleri iyice bitirecek
Bugünden daha kötü olamaz
Anket sonuçları | Eski Anketler


email Arkadaşınızın maili | print Yazıcı versionu | comment Yanıtlar (0 Gönder)

PHP 5 Exception (try-catch)

by Mr. CanaWar on Ağustos 27,2008

image
Bu yazıda Php 5 ile birlikte gelen en önemli özelliklerden biri olan Exception'lardan bahsedeceğim. Namı değer try-catch yapısı. Peki biz bu Exception lara neden gerek duyuyoruz öncelikle bu sorunun cevabını verelim. Yazılım geliştirmede yazılımı kodlamak kadar debug (hata ayıklama) da önemlidir. Çok büyük projelerde bir hata denetim mekanizması oluşturmadan ilerlersek, betiğimiz herhangi bir hata oluşturduğunda bu hatayı ayıklamak(bulmak ve onarmak) çok güç olacaktır. yüz binlerce satır kodun arasından hatanın nereden kaynaklandığını bulmak, büyük zaman ve iş gücü kaybına neden olabilir. İşte tam bu noktada Exception imdadımıza koşuyor. Aşağıda 2 adet kod bloğu var iki kodu da dilerseniz çalıştırıp çıktılarına bakabilirsiniz.

İlk kodumuz try-catch yapısı içerisinde yazıldı ve bu sayede hata denetimini kedi elimizde tutabiliyoruz.

 

function bolme($bolen,$bolunen) {

   
if ($bolen==0) {

       
throw new Exception('Bir sayı sıfıra bölünemez');

   
}

   
else return "Sonuç: ".$bolunen/$bolen;

}



try {

   

    echo bolme
(5,20) . "
"
;

    echo bolme
(0,20) . "
"
;

    echo bolme
(5,100) . "
"
;

       

} catch (Exception $e) {

    echo
'exception: ',  $e->getMessage(), "
"
;

}



echo
"merhaba";

?>

İlk kodumuz çalıştırdığımızda aşağıdaki gibi bir çıktı aldık.

/*Sonuç: 4

exception: Bir sayı sıfıra bölünemez

merhaba */

Peki kodumuz ne yaptı bir bakalım. İlk olarak 20 sayısı 5 e bölündü ve sonucu 4 yazıldı. Tekrar bolme() metodu çağırıldı. Fakat $bolen değeri 0 olduğu için throw ile yeni bir exception fırlatıldı fırlatılan exception catch tarafından yakalanıp $e exception nesnesi yaratıldı $e nesnesi birçok metod içeriyor yazının ilerleyen bölümlerinde bunları da göreceğiz. Son olarak try { } içerisindeki kod bloğu durdurulup catch {} den sonraki satırdan betiğimiz çalışmaya devam etti ve merhaba kelmesini yazdırdı. Görüldüğü gibi hata oluştuğunda betiğimizin tamamı durmadı sadece try {} içerisindeki kod bloğu durdurulup betik kaldığı yerden devam etti.

İkinci kodumuz daha sıradan ve hata denetimi yapılmamış durumda.



function bolme($bolen,$bolunen) {

   
return "Sonuç: ".$bolunen/$bolen;

}

        echo bolme
(5,20) . "
"
;

    echo bolme
(0,20) . "
"
;

    echo
"merhaba";

?>


İkinci kodumuzda try-catch kullanmadık ve ekranımızda bir warning mesajı aldık. Sıfıra bölme php yorumlayıcısı tarafından warning olarak bildiriliyor. Php yorumlayıcısı warning verdiğinde script betiği durmaz. Bu nedenle ekran çıktımız.

/*Sonuç: 4



Warning: Division by zero in C:wampwwwpublic_htmlphpi.php on line 3

Sonuç:

merhaba */

şeklinde olacaktır. Sıfıra bölme işlemi warning değilde fatal error olarak karşımıza çıksaydı çıktımız.

/*

fatal error: Division by zero in C:wampwwwpublic_htmlphpi.php on line 3

*/

şeklinde olacaktı ve program betiğimiz durdurulacaktı. Belki php ile yazılan kodlarda OOP kullanılmadıysa bu durum pek fazla sorun olmaya bilir hatalı satıra gideriz ve durumu çözebiliriz. Fakat OOP Class yapısı ile yazılan scriptlerde hatayı hata satırını bulmamamız çok daha zor olacak tır. Bununla birlikte eğer geliştirmekte olduğunuz proje sürekli yaşamak zorunda ise örneğin bir e-ticaret portalı geliştiriyorsanız exception kullanmanız her zaman sizin yararınıza olacaktır. Mersela e-ticaret portalı geliştiriyorsunuz ve merkez bankasından döviz kurlarını çekip yazdırmanız gerekli ve bu kodu exception kullamadan yazdınız. İşleyen sisteme upload ettiniz. merkez bankasından veriler alınırken bir hata ile karşılaştınız. Ne oldu ekranda kocaman bir error yazısı siteye müşteriler erişemiyor. E-bay 30 saniye bu nedenle kapalı kalmış olsa 10.000 lerce dolar zarar ederdi herhalde.

Şimdi de Exception nesnesini biraz inceleyelim.

php

class Exception

{

   
protected $message = 'Unknown exception';   // exception mesajı

   
protected $code = 0;                        // tanılanabilir exception kodu

   
protected $file;                            // exception un fırlatıldığı dosya

   
protected $line;                            // exception un fırlatıldığı satır



   
function __construct($message = null, $code = 0);



   
final function getMessage();                
// fırlatılan mesajı döndürür 

   
final function getCode();                  
// fırlatılan exception kodunu döndürür

   
final function getFile();                  
//  exception ın fırlatıldığı dosya ismini döndürür

   
final function getLine();                  
 // exception ın fırlatıldığı satır numarasını döndürür

   
final function getTrace();                  
// exception fırlatılmasına neden olan metod ve dosya hakkında array olarak bilgi veri 

   
final function getTraceAsString();        
// getTrace() in yaptığı yapar fakat array yerine string kullanır.



   
/* Overrideable (düzenlenebilir.) */

   
function __toString();                      
 // Hata mesajlarına yeni stiller katmak istenirse override(yeniden düzenleme) edilebilir.

}

?>

exception sınıfının yapısı bu şekilde. Örnek olması açısında Exception nesnesinin birkaç metodunu yukarıda yazdığımız kod da kullanalım.

 

function bolme($bolen,$bolunen) {

   
if ($bolen==0) {

       
throw new Exception('Bir sayı sıfıra bölünemez');

   
}

   
else return "Sonuç: ".$bolunen/$bolen;

}



try {

   

        echo bolme
(5,20) . "
"
;

    echo bolme
(0,20) . "
"
;

       

} catch (Exception $e) {

    echo
'exception: Dosya: '.$e->getFile().' Hata Satırı: '.$e->getLine().' Hata: '.$e->getMessage()."
"
;

       

        echo
"merhaba";

}

?>

Evet benden şimdilik bu kadar herkese iyi çalışmalar.

702 Kere okundu

Bu makaleyi beyendinizmi ?

1 2 3 4 5 Rating: 4.53Rating: 4.53Rating: 4.53Rating: 4.53Rating: 4.53 (Toplam 17 Oylar)
comment Yanıtlar (0 Gönder)
Çok okunanlar
En Çok Yorumlananlar
Yazarlar