Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

استخدام استثناء مخصص

جزء من قسم 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();
}
?>

يمنحك هذا النهج تحكماً دقيقاً في معالجة الأخطاء، مما يسمح لك بالاستجابة بشكل مختلف لأنواع مختلفة من المشكلات في تطبيقك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

challenge icon

التحدي

سهل

ستتلقى ثلاثة مدخلات: سلسلة نصية لاسم المستخدم (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 لاستدعاء الدالة ومعالجة الاستثناءات

?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow