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.
Mantık basittir: Hata yapma potansiyeli olan kodu try bloğuna al, hata olursa yapılacakları catch bloğuna yaz.
Gerçek projelerde farklı hata türleri için farklı aksiyonlar almak isteyebilirsiniz. Örneğin; veritabanı hatası ayrı, dosya sistemi hatası ayrı yönetilmelidir.
Bir hata yakalandığında, $e (veya belirlediğiniz isim) değişkeni bir nesnedir ve şu bilgilere erişmenizi sağlar:
Özel iş mantığınız için kendi istisna sınıflarınızı oluşturarak daha düzenli bir yapı kurabilirsiniz.
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.
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.
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("Bir sayı sıfıra bölünemez!");
}
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:
| Metot | Gö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.