Hata Yönetimi: Try-Catch Blokları ile Exception Handling

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Geleneksel PHP hataları (Warning, Notice) yerine, nesne yönelimli programlamada Exceptions (İstisnalar) kullanılır. Bir hata oluştuğunda PHP işlemi durdurur ve bir istisna "fırlatır" (throw). Eğer biz bu istisnayı "yakalamazsak" (catch), sayfa ölümcül bir hata (Fatal Error) ile sonlanır.

1. Temel Try-Catch Yapısı​


Mantık basittir: Hata yapma potansiyeli olan kodu try bloğuna al, hata olursa yapılacakları catch bloğuna yaz.

PHP:
<?php
try {
$sayi1 = 10;
$sayi2 = 0;

if ($sayi2 == 0) {
    // Kendi hatamızı manuel olarak fırlatıyoruz
    throw new Exception(&quot;Bir sayı sıfıra bölünemez!&quot;);
}

echo $sayi1 / $sayi2;

} catch (Exception $e) {
// Hata oluştuğunda burası çalışır
echo "Sistem Hatası: " . $e->getMessage();
} finally {
// Hata olsa da olmasa da her zaman çalışacak bölüm (Opsiyonel)
echo "

İşlem tamamlandı.";
}
?>

2. Çoklu Catch Blokları (Farklı Hata Türleri)​


Gerçek projelerde farklı hata türleri için farklı aksiyonlar almak isteyebilirsiniz. Örneğin; veritabanı hatası ayrı, dosya sistemi hatası ayrı yönetilmelidir.

PHP:
<?php
try {
// Veritabanı bağlantısı veya dosya okuma işlemi
if (!file_exists("veriler.txt")) {
throw new Exception("Dosya bulunamadı.", 404);
}
} catch (PDOException $e) {
echo "Veritabanı Hatası: " . $e->getMessage();
} catch (Exception $e) {
echo "Genel Hata: " . $e->getMessage() . " (Kod: " . $e->getCode() . ")";
}
?>

Exception Nesnesinin Önemli Metotları​


Bir hata yakalandığında, $e (veya belirlediğiniz isim) değişkeni bir nesnedir ve şu bilgilere erişmenizi sağlar:

MetotGörevi
$e->getMessage()Hatanın metin mesajını verir.
$e->getCode()Hata kodunu (sayısal) verir.
$e->getFile()Hatanın oluştuğu dosya yolunu verir.
$e->getLine()Hatanın kaçıncı satırda oluştuğunu verir.
$e->getTraceAsString()Hatanın oluşana kadar hangi yollardan geçtiğini (stack trace) verir.

3. Kendi Hata Sınıfınızı Oluşturma​


Özel iş mantığınız için kendi istisna sınıflarınızı oluşturarak daha düzenli bir yapı kurabilirsiniz.

PHP:
class OdemeHatasi extends Exception {
public function logla() {
// Hata mesajını bir dosyaya kaydetme mantığı burada olabilir
return "Ödeme hatası günlüğe kaydedildi.";
}
}

try {
throw new OdemeHatasi("Bakiye yetersiz!");
} catch (OdemeHatasi $e) {
echo $e->getMessage();
echo $e->logla();
}
?>

4. PHP 8 ile Gelen Catch Yeniliği​


PHP 8.0 ile birlikte, catch bloğu içinde hata değişkenini ($e) tanımlamak zorunda değilsiniz. Sadece hatanın türünü belirtmek yeterlidir.

PHP:
try {
// Bir şeyler yap
} catch (InvalidArgumentException) {
// Değişken tanımlamadan hata yakalandı
echo "Geçersiz bir argüman gönderildi.";
}

Sonuç​


Profesyonel bir PHP uygulamasında hataların ekrana kontrolsüzce basılması hem güvenlik açığıdır hem de kötü bir kullanıcı deneyimidir. Try-Catch yapısını kullanarak hataları kontrol altına alabilir, geliştirme aşamasında detaylı loglar tutarken, canlı sistemde kullanıcıya sadece "Bir hata oluştu" mesajı göstererek güvenliği sağlayabilirsiniz.
 
Geri
Üst