WhatsApp ile yaz
← Blog

PHP Hata Yönetimi ve Exception

📅 24.10.2026

PHP Hata Yönetimi ve Exception

PHP’de hata yönetimi, uygulamanızın güvenilirliğini, bakımını ve kullanıcı deneyimini doğrudan etkileyen kritik bir konudur. Doğru yapılandırma ile hataları önceden tespit edebilir, kullanıcıya anlaşılır mesajlar sunabilir ve sistemin beklenmedik kapanmasını engelleyebilirsiniz.


Hata Türleri ve Farkları

PHP’de hatalar iki ana kategoriye ayrılır: Runtime Errors (çalışma zamanı hataları) ve Exceptions (istisnalar). Runtime hataları, fonksiyonlar, sınıf metotları veya betik içinde doğrudan oluşan hatalardır. Bu hatalar genellikle E_WARNING, E_NOTICE gibi seviyelerle raporlanır. Exception ise try–catch bloklarıyla yakalanabilir, sınırlı bir kapsamda kontrol edilebilir ve hatayı yönlendirme yeteneği sunar.


Hata seviyeleri şunlardır: E_ERROR, E_WARNING, E_PARSE, E_NOTICE, E_STRICT, E_DEPRECATED ve E_USER_* kategorileri. Bu seviyeler, error_reporting() fonksiyonu ile kontrol edilebilir.


Hata Yönetimi Stratejileri

Doğru strateji, hataları erken yakalamak ve kullanıcı dostu mesajlar sunmaktır. Bunun için üç temel yaklaşım vardır:


  • global_error_handler: set_error_handler() ile tüm hataları tek bir fonksiyonda toplar.
  • global_exception_handler: set_exception_handler() ile tüm istisnaları merkezi bir noktada ele alır.
  • try-catch blokları: Belirli kod parçalarını kapsar ve özel hata mesajları üretir.

Bu yöntemler bir arada kullanılabilir; örneğin, global hata handler’ı tüm hataları loglar, try-catch ise kritik bölümlerde kullanıcıya özel mesajlar verir.


Try-Catch ile Exception Kullanımı

İstisna yönetimi, kodunuzu daha okunabilir ve hatasız hale getirir. Örnek bir veritabanı bağlantısı:


try {
    $pdo = new PDO($dsn, $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    // Hata mesajını logla
    error_log($e->getMessage());
    // Kullanıcıya güvenli mesaj göster
    echo "Veritabanına bağlanırken bir sorun oluştu.";
}

Burada setAttribute ile PDO’nun hata modu ERRMODE_EXCEPTION olarak ayarlanır. Böylece tüm PDO hataları istisna olarak fırlatılır ve catch bloğunda yakalanır.


Özel Exception Sınıfları

Uygulamanızda kendi istisna sınıflarınızı tanımlayarak hata türlerini daha iyi ayırt edebilirsiniz. Örneğin:


class ValidationException extends Exception {}
class NotFoundException extends Exception {}

function validateUser($user) {
    if (empty($user['email'])) {
        throw new ValidationException("E-posta zorunludur.");
    }
}

Bu yapı, hata yönetimini modüler ve okunabilir kılar. Her istisna tipine özel catch blokları eklenerek farklı işlemler yapılabilir.


Hata Loglama

Gerçek dünyada hataların kaydını tutmak, sorun çözme sürecini hızlandırır. error_log() fonksiyonu ile loglama yapılabilir. Ayrıca, Monolog gibi kütüphanelerle daha gelişmiş loglama mekanizmaları kurulabilir. Örnek:


try {
    // Kod bloğu
} catch (Exception $e) {
    error_log($e->getMessage(), 3, '/var/log/php_errors.log');
    http_response_code(500);
    echo "Bir hata oluştu, lütfen tekrar deneyin.";
}

Burada 3 parametresi, mesajı dosyaya yazmayı belirtir. Log dosyasının yazma izinleri ve konumu önemlidir.


PHP 8 Exception İyileştirmeleri

PHP 8 ile gelen Throwable arayüzü, hem Error hem de Exception sınıflarını kapsar. Bu sayede try-catch blokları hem istisnaları hem de hataları tek seferde yakalayabilir. Örnek:


try {
    // Kod
} catch (Throwable $t) {
    // Her iki tür hatayı da yakalar
}

PHP 8 ayrıca match ifadesi ile hata kodlarına göre farklı aksiyonlar almayı kolaylaştırır.


En İyi Uygulamalar

1. Hata raporlamayı üretim ortamında kapatın. Kullanıcılara hata mesajı göstermek yerine gizli log dosyalarına yönlendirin.


2. Hata seviyelerini uygun şekilde ayarlayın. E_ALL geliştirme sırasında kullanılırken, üretimde E_ERROR | E_WARNING | E_PARSE yeterli olabilir.


3. Custom error ve exception handler’ları kullanın. Böylece tüm hatalar tek noktadan yönetilir.


4. Hata mesajlarını kullanıcı dostu tutun. “Bir hata oluştu” gibi genel mesajlar, güvenlik açığı yaratmaz.


5. Log dosyalarını döndürün ve arşivleyin. Uzun süreli loglar diskinizi doldurabilir.


Sonuç

PHP’de hata yönetimi, kodunuzu hem güvenli hem de sürdürülebilir kılar. Exception kullanımı, hataları daha kontrollü bir şekilde ele almanızı sağlar. Doğru yapılandırılmış global handler’lar, özel istisnalar ve kapsamlı loglama ile uygulamanızın dayanıklılığını artırabilirsiniz. Hata yönetimini sistematik bir şekilde ele almak, uzun vadede bakım maliyetlerini düşürür ve kullanıcı memnuniyetini yükseltir.