PHP
Meydan okuma - Hata yönetimi
try/catch, throw ve özel istisnayla sağlam bir sipariş sistemi yazarsın.
Meydan okuma - Hata yönetimi
Bu meydan okumada sağlam bir sipariş sistemi yazacaksın. InvalidOrderException adında özel bir istisna sınıfı tanımlar, processOrder(int $quantity, float $price): float fonksiyonunda throw ile fırlatırsın.
Geçersiz miktar veya negatif fiyat, istisna fırlatır. Çağıran kod bu istisnayı try/catch bloğuyla yakalar ve hata mesajını ekrana basar. Bu, orta seviye hata yönetimi bilginin tamamını yoklar.
try, catch, throw akışı
class InvalidOrderException extends Exception {} ile özel istisna tanımlarsın; bu sınıf Exception'ın tüm methodlarını miras alır. throw new InvalidOrderException("mesaj") ile fırlatılır.
try bloğu riskli kodu sarar; catch (InvalidOrderException $e) ile yalnızca bu tür yakalanır. $e->getMessage() ile hata mesajına erişilir. Bu yapı, hatayı çağıran koda güvenle taşımanın standart yoludur.
Uygulama InvalidOrderException ve processOrder yaz
Önce class InvalidOrderException extends Exception {} ile özel istisna tanımla. Sonra processOrder(int $quantity, float $price): float fonksiyonunu yaz: $quantity <= 0 ise throw new InvalidOrderException("Geçersiz miktar"); $price < 0 ise throw new InvalidOrderException("Negatif fiyat"). Geçerliyse $quantity * $price döndür. Sonra try { echo processOrder(0, 100) . "\n"; } catch (InvalidOrderException $e) { echo "Hata: " . $e->getMessage() . "\n"; } çağrısını ekle.
Örnek çözümü göster
" . $e->getMessage() . "\n"; } yaz.
Örnek çözüm:
<?php
// InvalidOrderException sınıfını ve processOrder fonksiyonunu yaz
class InvalidOrderException extends Exception {}
function processOrder(int $quantity, float $price): float {
if ($quantity <= 0) {
throw new InvalidOrderException("Geçersiz miktar");
}
if ($price < 0) {
throw new InvalidOrderException("Negatif fiyat");
}
return $quantity * $price;
}
try {
echo processOrder(0, 100) . "\n";
} catch (InvalidOrderException $e) {
echo "Hata: " . $e->getMessage() . "\n";
}
Kendini test et
-
Özel istisna sınıfı oluştururken hangi sınıftan genişletirsin?
- stdClass
- Error
- Throwable
- Exception
Cevabı göster
Exception — Doğru. class InvalidOrderException extends Exception ile tüm istisna methodlarını miras alırsın.
-
throw ifadesini tamamla
if ($quantity === 0) {
____ new InvalidOrderException("Miktar gerekli");
}
Cevabı göster
if ($quantity === 0) {
throw new InvalidOrderException("Miktar gerekli");
}
-
Hata yönetimi anahtar kelimelerini eşle
- try
- riskli kodu sarar
- catch
- hatayı yakalar
- throw
- hatayı fırlatır
- finally
- her zaman çalışır
Sıradaki ders: Meydan okuma - Mini API