Ö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.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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 birInvalidCredentialsExceptionfı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) birInvalidCredentialsExceptionfı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_doeveya 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
?>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
1İleri Seviye Fonksiyonlar
Anonim FonksiyonlarClosure'lar ve 'use'Ok Fonksiyonları (Arrow Functions)Geri Çağırma (Callback) Fonksiyonları'call_user_func' KullanımıDeğişken FonksiyonlarReferans ile Değer AktarımıÖz Yinelemeli (Recursive) FonksiyonlarÖzet: Fonksiyon Karması4Çok Boyutlu Diziler
2 Boyutlu Dizi Oluşturma2 Boyutlu Dizi Elemanlarına Erişme2 Boyutlu Dizi Elemanlarını Değiştirmeİç İçe Döngülerle Yineleme2 Boyutlu İlişkisel DizilerÖzet: Basit Izgara Egzersizi2İleri Düzey Dizi İşlemleri
'array_push' ile Ekleme'array_pop' ile Silme'array_unshift' ile Ekleme'array_shift' ile Silmeİndisli Dizileri Birleştirmeİlişkisel Dizileri Birleştirme'array_slice' ile Kesit Alma'in_array' ile Değer Kontrolü'array_search' ile Anahtar AramaÖzet: Çalma Listesi Alıştırması5Öğrenci Not Defteri
Proje Kurulumu: Veri YapısıYeni Öğrenci EklemeÖğrenciye Not EklemeÖğrenci Ortalamasını HesaplamaEn Başarılı Öğrenciyi BulmaKarne Oluşturma8Hata ve İstisna Yönetimi
PHP Hatalarını Anlamak'try...catch' Bloğu'finally' BloğuBir İstisna FırlatmakÖzel Bir İstisna OluşturmaÖzel Bir İstisna KullanmaÖzet: Girdi Doğrulama3Dizileri Sıralama
İndisli Dizileri Artan Sırada Sıralamaİndisli Dizileri Azalan Sırada Sıralamaİlişkisel Dizileri Değere Göre Sıralamaİlişkisel Dizileri Anahtara Göre SıralamaDoğal Sıralama (Natural Order)'usort' ile Özel SıralamaÖzet: Liderlik Tablosu Sıralama