yazdığımız program parçaları çalışırken hatalar meydana getirebilir. bu meydana gelen hataları gizlemek bir seçenek iken bu hataları yakalamak ve bazı işlemler yapmak (hataları email ile göndermek, log tutmak vb..) da seçenekler arasındadır.

Şimdi bir senaryo düşünelim. Kullanıcıdan yaşını istediniz ve kullanıcı yaş yerine "evli" yazdı. Siz bu değeri kontrol etmeden hesaplama yaparsanız programınız ya yanlış sonuç verir ya da hata verip durur. İşte bu gibi beklenmedik durumlara istisna (exception) diyoruz.

php ile birlikte istisnalar ( veya hatalar ) try catch bloğu içinde yakalanabilirler.

try içinde bir hata olduğunda catch bloğuna bu hata atılır. catch bloğunda hata ile ilgili yapılmak istenen işlemler gerçekleştirilir.

kullanımı::

<?php
try{
// istisna olabilecek kodlar
}catch( Exception $hata ){
// $hata kodu burada işlenir.
}

try kelimesinin anlamı denemek, catch ise yakalamak demek. Yani "şu kodları dene, hata olursa yakala" demiş oluyoruz.

örnek::

try {
$yas = "evli";
if ( !is_integer($yas) ) {
throw new Exception('$yas sayı girilmedi');
}
echo "Bu satır işlendi..";
} catch (Exception $hata) {
echo "Hata Oluştu :: ". $hata->getMessage();
}

// çıktısı
// Hata Oluştu :: $yas sayı girilmedi

kodların açıklamasını yapacak olursak,

$yas değişkenine sayı yerine "evli" yazdık. is_integer() fonksiyonu ile bu değerin sayı olup olmadığını kontrol ettik. Sayı olmadığı için throw ifadesi ile yeni bir istisna fırlattık.

throw satırı çalıştığı anda try bloğundaki kodların çalışması durur. Bu yüzden "Bu satır işlendi.." yazısı ekrana gelmez ve program doğrudan catch bloğuna geçer.

catch bloğunda ise fırlatılan hatayı $hata değişkenine aldık ve getMessage() metodu ile throw ederken yazdığımız mesajı ekrana yazdık.

Eğer $yas değişkenine 25 gibi bir sayı yazarsanız hata oluşmaz, catch bloğu hiç çalışmaz ve ekrana "Bu satır işlendi.." yazar.

finally bloğu

Dilerseniz try catch yapısının sonuna finally bloğu da ekleyebilirsiniz. finally içindeki kodlar hata olsa da olmasa da her durumda çalışır. Genelde açılan dosyayı yada bağlantıyı kapatmak gibi işlerde kullanılır.

try {
// istisna olabilecek kodlar
} catch (Exception $hata) {
echo $hata->getMessage();
} finally {
echo "ben her durumda çalışırım..";
}

try catch yapısını en çok kullandığımız yerlerden biri de veritabanı bağlantısıdır. Bunun örneğini pdo ile veritabanı bağlantısı yazımda görebilirsiniz.