06 Dec

PHP de hata fırlatmak ( Exception kullanımı )

Php nin try-catch kullanımını anlatırken phpnin bu yapı için çok yeterli olmadığından bahsetmiştik. Hatanın yakalanabilmesi için bu hatayı fırlatabilen ( Exception ) bir mekanizma gereklidir. Bu da PHP5 ile gelen yeni özellilerde mevcut.
Tabi sadece PHP ekibine mecbur değilsiniz bu hata mekanizması için. Kendiniz de hata fırlatma mekanizması oluşturabilirsiniz.

Bu anlatım karmaşasını örnek ile sadeleştirelim :

1
2
3
4
$dosya=fopen('dosya','r');
$veri=fread($dosya,1024);
echo $veri;
fclose($dosya);

Örneğimiz çok basit, dosyayı açıp okuyor ve veriyi ekrana yazdırıyoruz. Bunu klasik hata yönetim sistemi ile değiştirelim.

1
2
3
4
5
6
7
if($dosya=fopen('dosya','r')){
    $veri=fread($dosya,1024);
    echo $veri;
    fclose($dosya)
}else {
   echo 'dosyayı açamadı';
}

Evet, gayet basit ve normal bir kullanım. Şimdi bunu nasıl try-catch uyumlu yapabileceğimizi göreceğiz, sonra buna neden gerek duyduğumuzu anlatmaya çalışacağım.

1
2
3
4
5
6
7
8
9
10
try {
  if(!$dosya=fopen('dosya','r')){
     throw new Exception('Dosya açılamadı');
  }
  $veri=fread($dosya,1024);
  echo $veri;
  fclose($dosya);
}catch(Exception $e){
   echo $e->getMessage();
}

Neden böyle birşeye ihtiyaç duyuyoruz . Bundan önce yukarıdaki kodu yorumlayalım :

Eğer dosya açılır ise okuduğumuz veriyi ekrana yazdırıyoruz. Eğer dosya açmada problem olursa hata fırlatma mekanizmasi ( throw ) ile hata fırlatıyoruz. Bundan sonrada catch bloğumuzda ( throw satırından sonraki satır çalışmaz ve burdan sonra catch bloğu çalışır ) hatayı yakalayarak yapmamız gerekeni yapıyoruz ( burada sadece hatayı ekrana yazdırıyoruz ).

Bu neden gerekli ? Öncelikle hatanın yönetilebilmesi daha kolay , kodun okunabilirliğini arttırır ve en önemlisi daha performanslı çalışır.
Yukarıdaki kodu örnek göstererek try-catch hata yakalama mekanizmasının avantajından dem vurmak mümkün değil tabiki. Bu mekanizmanın kullanımını kavradığınızda ve kullandığınızda daha net canlanacaktır zihninizde.

3 thoughts on “PHP de hata fırlatmak ( Exception kullanımı )

  1. Ersin hocam merhaba, bu konuda birşey sormak istiyorum size. bu try catch olayını bir sınıf içine nasıl ekleyebiliriz? mesela

    <?php

    class sinif

    {

    function dosya() {

    file_get_contents();

    }

    function query() {

    mysql_query();

    return $veri

    }

    function isimyaz() {

    echo $this->isim;

    }

    }

    ?>

    böyle uzayıp giden bir sınıfımız var. sınıfta __construct __destruct falan da var diyelim. fonksiyonlar veri yada truee false döndürüyor. buraya mantıklı bir şekilde nasıl eklenir try catch? bir örnek verebilirseniz sevinirim hocam.

  2. Php nin az bölümlerinde try catch blogunu kullanabiliyoruz, bu yüzden bir istisna (exception) fırlatmayan (throw) yerlerde kendi istisna yöntemimizi oluşturmamız gerekiyor. Şöyle ki :

    < ?php class sinif { function dosya() { $content = file_get_contents(); if(empty($content)) throw new Exception("İçerik alınamadı"); return $content; } } $sinif = new sinif(); try { $icerik = $sinif->dosya();
    }catch(Exception $e){
    echo “Hata oldu. Hata Mesajı : “.$e->getMessage();
    }
    ?>

    Bu mantık ile kendi try catch yapımızı oluşturabiliriz.

Comments are closed.