Anasayfa » PHP » PHP 5 Exception (try-catch)

PHP 5 Exception (try-catch)

11 Nisan 2010  |  Yazar: coders  |  Yorum Yok  |  24 kez okundu
Facebook'da Paylaş Twitter'da Paylas FriendFeed'de Paylaş PHP 5 Exception (try-catch)

Bu yazıda 5 ile birlikte gelen en önemli özelliklerden biri olan ’lardan bahsedeceğim. Namı değer yapısı. Peki biz bu Exception lara neden gerek duyuyoruz öncelikle bu sorunun cevabını verelim. Yazılım geliştirmede 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 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) . "<br>";

    echo bolme(0,20) . "<br>";

    echo bolme(5,100) . "<br>";

} catch (Exception $e) {

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

}

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) . "<br>";

    echo bolme(0,20) . "<br>";

    echo "merhaba";

?>

İkinci kodumuzda try-catch kullanmadık ve ekranımızda bir warning mesajı aldık. Sıfıra bölme tarafından warning olarak bildiriliyor. 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 $ = 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, $ = 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) . "<br>";

    echo bolme(0,20) . "<br>";

} catch (Exception $e) {

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

        echo "merhaba";

}

?>

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

Okan ATABAĞ

Facebok'ta Paylaş

Benzer Yazılar

Etiketler: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
avatar

Ahmet Ates

http://www.coders.gen.tr/ 25 yasindayim. Z.K.U Biyomedikal Cihaz Teknolojisi bölümünü okudum, Programlama dilleri arasindan ilgilendiğim ve profesyonel olarak hizmet verdiğim dil Fortran'dir. Web olarak Php,Css ve hazır sistemler olarak Wordpress ve Vbulletine hayranlık besliyorum.

Bu yazı hakkında birşeyler demek ister misiniz?

RSS üzerinden bu yazıya yapılan yorumları takip edin.

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir.

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Programlama