CodeBlanks Logo Icon CodeBlanks

Meydan okuma - Hata yönetimi

PHP kursu · Orta seviye · Ders 114/115

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

  1. Ö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.

  2. throw ifadesini tamamla

    if ($quantity === 0) {
        ____ new InvalidOrderException("Miktar gerekli");
    }
    Cevabı göster
    if ($quantity === 0) {
        throw new InvalidOrderException("Miktar gerekli");
    }
  3. Hata yönetimi anahtar kelimelerini eşle

    try
    riskli kodu sarar
    catch
    hatayı yakalar
    throw
    hatayı fırlatır
    finally
    her zaman çalışır

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