استخدام استثناء مخصص
جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 57 من 68.
الآن بعد أن قمت بإنشاء فئة استثناء مخصصة خاصة بك، حان الوقت لوضعها موضع الاستخدام العملي. يتضمن استخدام استثناء مخصص خطوتين رئيسيتين: رمي نوع الاستثناء المحدد الخاص بك عند حدوث مشكلة، والتقاط نوع الاستثناء المحدد هذا لمعالجته بشكل مناسب.
عندما تقوم برمي استثناء مخصص، فإنك تستخدم نفس الكلمة المفتاحية throw ولكنك تقوم بإنشاء مثيل من فئتك المخصصة بدلاً من فئة Exception العامة. هذا يجعل معالجة الأخطاء لديك أكثر دقة وفائدة.
<?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!";
}
?>تظهر القوة الحقيقية عند التقاط الاستثناء المخصص الخاص بك. بدلاً من التقاط Exception عام، يمكنك التقاط InvalidEmailException المحدد الخاص بك. يتيح لك ذلك التعامل مع أنواع مختلفة من الأخطاء بطرق مختلفة، مما يجعل معالجة الأخطاء لديك أكثر استهدافاً وإفادة.
<?php
try {
validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
echo "Email error: " . $e->getMessage();
}
?>يمنحك هذا النهج تحكماً دقيقاً في معالجة الأخطاء، مما يسمح لك بالاستجابة بشكل مختلف لأنواع مختلفة من المشكلات في تطبيقك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلستتلقى ثلاثة مدخلات: سلسلة نصية لاسم المستخدم (username)، وسلسلة نصية لكلمة المرور (password)، ورقم يمثل الحد الأدنى لطول كلمة المرور. يجب ألا يكون اسم المستخدم فارغاً، ويجب أن تستوفي كلمة المرور متطلبات الحد الأدنى للطول.
قم بإنشاء فئة استثناء مخصصة تسمى InvalidCredentialsException ترث من الفئة الأساسية Exception.
قم بإنشاء دالة تسمى validateCredentials تقبل ثلاثة معاملات: username، و password، و minimum length. داخل هذه الدالة:
- إذا كان اسم المستخدم فارغاً (سلسلة نصية فارغة)، قم برمي
InvalidCredentialsExceptionمع الرسالة"Username cannot be empty" - إذا كان طول كلمة المرور أقل من الحد الأدنى للطول، قم برمي
InvalidCredentialsExceptionمع الرسالة"Password must be at least X characters long"(حيث X هي قيمة الحد الأدنى للطول) - إذا نجحت كلتا عمليتي التحقق، قم بطباعة
"Credentials are valid"
استخدم كتلة try...catch لاستدعاء الدالة مع المدخلات المقدمة. في كتلة catch، قم بالتقاط InvalidCredentialsException بشكل محدد واطبع "Validation error: " متبوعة برسالة الاستثناء باستخدام طريقة getMessage().
تنسيق الإدخال:
- السطر الأول: سلسلة نصية تمثل اسم المستخدم (مثال:
john_doeأو سلسلة فارغة) - السطر الثاني: سلسلة نصية تمثل كلمة المرور (مثال:
pass123) - السطر الثالث: عدد صحيح يمثل الحد الأدنى لطول كلمة المرور (مثال:
8)
المخرجات المتوقعة:
- إذا كانت الاعتمادات صالحة:
Credentials are valid - إذا كان اسم المستخدم فارغاً:
Validation error: Username cannot be empty - إذا كانت كلمة المرور قصيرة جداً:
Validation error: Password must be at least X characters long(حيث X هو الحد الأدنى للطول)
ورقة مرجعية
لاستخدام الاستثناءات المخصصة، قم برمي مثيل من فئتك المخصصة والتقط ذلك النوع المحدد من الاستثناء:
<?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();
}
?>يتيح ذلك معالجة دقيقة للأخطاء من خلال التقاط أنواع استثناءات محددة بدلاً من كائنات Exception العامة.
جرّب بنفسك
<?php
// قراءة المدخلات
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));
// TODO: اكتب الكود الخاص بك أدناه
// 1. قم بإنشاء فئة InvalidCredentialsException
// 2. قم بإنشاء دالة validateCredentials
// 3. استخدم كتلة try...catch لاستدعاء الدالة ومعالجة الاستثناءات
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1الدوال المتقدمة
الدوال المجهولةالـ Closures وكلمة 'use'دوال السهمدوال الـ Callbackاستخدام 'call_user_func'دوال المتغيراتالتمرير بالمرجعالدوال العوديةمراجعة: مزيج الدوال4المصفوفات متعددة الأبعاد
إنشاء مصفوفة ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادتعديل عناصر المصفوفة ثنائية الأبعادالتكرار باستخدام الحلقات المتداخلةالمصفوفات الترابطية ثنائية الأبعادمراجعة: تمرين الشبكة البسيطة2معالجة المصفوفات المتقدمة
الإضافة باستخدام 'array_push'الحذف باستخدام 'array_pop'الإضافة باستخدام 'array_unshift'الحذف باستخدام 'array_shift'دمج المصفوفات المفهرسةدمج المصفوفات الترابطيةالاستخراج باستخدام 'array_slice'القيم باستخدام 'in_array'المفاتيح باستخدام 'array_search'مراجعة: تمرين قائمة التشغيل5سجل درجات الطلاب
إعداد المشروع: هيكل البياناتإضافة طالب جديدإضافة درجة لطالبحساب متوسط الطالبإيجاد الطالب المتفوقإنشاء تقرير الدرجات8معالجة الأخطاء والاستثناءات
فهم أخطاء PHPكتلة 'try...catch'كتلة 'finally'إطلاق استثناءإنشاء استثناء مخصصاستخدام استثناء مخصصمراجعة: التحقق من صحة المدخلات3ترتيب المصفوفات
ترتيب المصفوفات المفهرسة تصاعدياًترتيب المصفوفات المفهرسة تنازلياًترتيب المصفوفات الترابطية حسب القيمةترتيب المصفوفات الترابطية حسب المفتاحالترتيب بالترتيب الطبيعيالترتيب المخصص باستخدام 'usort'مراجعة: ترتيب لوحة المتصدرين