CodeBlanks Logo Icon CodeBlanks

Özel istisna sınıfları

PHP kursu · Orta seviye · Ders 103/115

Exception sınıfından türeyen kendi istisna sınıflarını tanımlamayı öğrenirsin.

Kendi istisna sınıfını yaz

Bazen hatanın türünü ayırt etmek istersin: geçersiz e-posta, yetkisiz istek, eksik stok. Bunun için Exception'dan türeyen kendi sınıfını yazarsın.

class InvalidEmailException extends Exception {} ile boş bir alt sınıf oluşturursun. Artık catch (InvalidEmailException $e) ile yalnız bu türü yakalayabilirsin.

Özel istisnalar, hata yönetimini alan bazlı (domain-specific) yapar.

Yapıcı ve parent çağrısı

Özel istisnaya ek alan eklersen, yapıcıda parent::__construct() çağırman gerekir. Böylece mesaj ve kod Exception sınıfına iletilir.

Örnek: class InvalidEmailException extends Exception { public function __construct($email) { parent::__construct("Geçersiz e-posta: $email"); } }

Artık getMessage() özelleştirdiğin mesajı döndürür. İstersen sınıfa yeni yöntemler de ekleyebilirsin; böylece hata nesnesi davranış kazanır.

Uygulama Özel istisna sınıfı ve kullanımı

InvalidEmailException sınıfını extends Exception ile tanımla. validateEmail(string $email): void fonksiyonu yaz: e-posta '@' içermiyorsa throw new InvalidEmailException("Geçersiz e-posta") fırlat. try/catch ile validateEmail("bad") çağır, hatayı yakala ve mesajı yazdır.

Örnek çözümü göster
void yaz; if (strpos($email, '@') === false) throw new InvalidEmailException("Geçersiz e-posta") çağır. Sonra try { validateEmail("bad"); } catch (InvalidEmailException $e) { echo $e->getMessage() . "\n"; } yaz.
Örnek çözüm:
<?php
// InvalidEmailException sınıfını ve validateEmail fonksiyonunu yaz
class InvalidEmailException extends Exception {
}

function validateEmail(string $email): void {
    if (strpos($email, '@') === false) {
        throw new InvalidEmailException("Geçersiz e-posta");
    }
    echo "Geçerli\n";
}

try {
    validateEmail("bad");
} catch (InvalidEmailException $e) {
    echo $e->getMessage() . "\n";
}

Kendini test et

  1. Özel istisna sınıfı nasıl tanımlanır?

    • class MyError implements Exception {}
    • class MyError inherits Exception {}
    • class MyError extends Exception {}
    • class MyError uses Exception {}
    Cevabı göster

    class MyError extends Exception {} — Doğru. extends Exception ile alt sınıf oluşturulur.

  2. Sınıf bildirimini tamamla

    <?php
    class InvalidEmailException ____ {
        public function text(): string {
            return $this->getMessage();
        }
    }
    
    Cevabı göster
    <?php
    class InvalidEmailException extends Exception {
        public function text(): string {
            return $this->getMessage();
        }
    }
    
  3. Özel istisna kavramlarını eşleştir

    extends Exception
    Sınıfı türetir
    parent::__construct()
    Üst sınıf yapıcısını çağırır
    throw new InvalidEmailException()
    Özel istisnayı fırlatır
    catch (InvalidEmailException $e)
    Özel istisnayı yakalar

Orta seviye bölümündeki tüm dersler