PHP
Özel istisna sınıfları
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
-
Ö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.
-
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();
}
}
-
Ö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
Sıradaki ders: Özet - Hata yönetimi