Menu
Coddy logo textTech

Özel Bir İstisna Kullanma

Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 57 / 68.

Kendi özel istisna sınıfınızı oluşturduğunuza göre, artık onu pratik kullanıma sunmanın zamanı geldi. Özel bir istisna kullanmak iki temel adımı içerir: bir sorun oluştuğunda kendi özel istisna türünüzü fırlatmak ve bu özel istisna türünü uygun şekilde işlemek için yakalamaktır.

Özel bir istisna fırlattığınızda, aynı throw anahtar kelimesini kullanırsınız ancak genel Exception sınıfı yerine kendi özel sınıfınızın bir örneğini oluşturursunuz. Bu, hata yönetiminizi daha kesin ve anlamlı hale getirir.

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}
?>

Asıl güç, özel istisnanızı yakaladığınızda ortaya çıkar. Genel bir Exception yakalamak yerine, spesifik InvalidEmailException istisnanızı yakalayabilirsiniz. Bu, farklı hata türlerini farklı şekillerde ele almanıza olanak tanıyarak hata yönetiminizi daha hedef odaklı ve bilgilendirici hale getirir.

<?php
try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

Bu yaklaşım, uygulamanızdaki çeşitli problem türlerine farklı şekilde yanıt vermenize olanak tanıyarak hata yönetimi üzerinde size hassas bir kontrol sağlar.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

challenge icon

Görev

Kolay

Üç girdi alacaksınız: bir kullanıcı adı dizesi (string), bir şifre dizesi ve bir minimum şifre uzunluğu sayısı. Kullanıcı adı boş olmamalı ve şifre minimum uzunluk gereksinimini karşılamalıdır.

Temel Exception sınıfını genişleten InvalidCredentialsException adında özel bir istisna sınıfı oluşturun.

Kullanıcı adı, şifre ve minimum uzunluk olmak üzere üç parametre kabul eden validateCredentials adında bir fonksiyon oluşturun. Bu fonksiyonun içinde:

  • Eğer kullanıcı adı boşsa (boş bir dize), "Username cannot be empty" mesajıyla bir InvalidCredentialsException fırlatın.
  • Eğer şifre uzunluğu minimum uzunluktan azsa, "Password must be at least X characters long" mesajıyla (burada X minimum uzunluk değeridir) bir InvalidCredentialsException fırlatın.
  • Her iki doğrulama da geçerse, "Credentials are valid" yazdırın.

Fonksiyonu sağlanan girdilerle çağırmak için bir try...catch bloğu kullanın. catch bloğunda, özellikle InvalidCredentialsException istisnasını yakalayın ve "Validation error: " ifadesinin ardından getMessage() metodunu kullanarak istisna mesajını yazdırın.

Girdi formatı:

  • Birinci satır: Kullanıcı adını temsil eden bir dize (örnek: john_doe veya boş bir dize)
  • İkinci satır: Şifreyi temsil eden bir dize (örnek: pass123)
  • Üçüncü satır: Minimum şifre uzunluğunu temsil eden bir tam sayı (örnek: 8)

Beklenen çıktı:

  • Kimlik bilgileri geçerliyse: Credentials are valid
  • Kullanıcı adı boşsa: Validation error: Username cannot be empty
  • Şifre çok kısaysa: Validation error: Password must be at least X characters long (burada X minimum uzunluktur)

Kopya kağıdı

Özel istisnaları kullanmak için, özel sınıfınızın bir örneğini fırlatın ve bu belirli istisna türünü yakalayın:

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}

try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

Bu, genel Exception nesneleri yerine belirli istisna türlerini yakalayarak hassas hata yönetimi yapılmasına olanak tanır.

Kendin dene

<?php
// Girişi oku
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));

// YAPILACAK: Kodunuzu aşağıya yazın
// 1. InvalidCredentialsException sınıfını oluşturun
// 2. validateCredentials fonksiyonunu oluşturun
// 3. Fonksiyonu çağırmak ve istisnaları işlemek için try...catch bloğunu kullanın

?>
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler