مراجعة: التحقق من صحة المدخلات
جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 58 من 68.
التحدي
سهلستتلقى أربعة مدخلات: سلسلة نصية لعنوان البريد الإلكتروني، وسلسلة نصية لرقم الهاتف، ورقم للحد الأدنى للسن، ورقم للسن الفعلي.
قم بإنشاء فئتين مخصصتين للاستثناءات (exception classes):
InvalidEmailExceptionالتي ترث من فئةExceptionالأساسيةInvalidAgeExceptionالتي ترث من فئةExceptionالأساسية
قم بإنشاء دالة تسمى validateUserData تقبل أربعة معاملات: البريد الإلكتروني، والهاتف، والحد الأدنى للسن، والسن الفعلي. داخل هذه الدالة:
- تحقق مما إذا كان البريد الإلكتروني يحتوي على رمز
@. إذا لم يكن كذلك، قم برميInvalidEmailExceptionمع الرسالة"Email must contain @ symbol" - تحقق مما إذا كان طول رقم الهاتف هو 10 أحرف بالضبط. إذا لم يكن كذلك، قم برمي
Exceptionعام مع الرسالة"Phone number must be 10 digits" - تحقق مما إذا كان السن الفعلي أقل من الحد الأدنى للسن. إذا كان كذلك، قم برمي
InvalidAgeExceptionمع الرسالة"User must be at least X years old"(حيث X هي قيمة الحد الأدنى للسن) - إذا نجحت جميع عمليات التحقق، اطبع
"User data is valid"
استخدم كتلة try...catch...finally لاستدعاء الدالة مع المدخلات المقدمة. قم بإنشاء ثلاث كتل catch منفصلة:
- كتلة
catchالأولى يجب أن تلتقطInvalidEmailExceptionوتطبع"Email error: "متبوعة برسالة الاستثناء - كتلة
catchالثانية يجب أن تلتقطInvalidAgeExceptionوتطبع"Age error: "متبوعة برسالة الاستثناء - أضف كتلة
catchثالثة تلتقط أيExceptionآخر وتطبع"Validation error: "متبوعة برسالة الاستثناء
في كتلة finally، اطبع "Validation process completed".
تنسيق المدخلات:
- السطر الأول: سلسلة نصية تمثل عنوان البريد الإلكتروني (مثال:
user@example.comأوinvalidemail.com) - السطر الثاني: سلسلة نصية تمثل رقم الهاتف (مثال:
1234567890أو12345) - السطر الثالث: عدد صحيح يمثل الحد الأدنى للسن المطلوب (مثال:
18) - السطر الرابع: عدد صحيح يمثل السن الفعلي (مثال:
25أو16)
المخرجات المتوقعة:
- إذا كانت جميع البيانات صالحة:
User data is validمتبوعة بـValidation process completedفي سطر جديد - إذا كان البريد الإلكتروني غير صالح:
Email error: Email must contain @ symbolمتبوعة بـValidation process completedفي سطر جديد - إذا كان رقم الهاتف غير صالح:
Validation error: Phone number must be 10 digitsمتبوعة بـValidation process completedفي سطر جديد - إذا كان السن أقل من الحد الأدنى:
Age error: User must be at least X years old(حيث X هو الحد الأدنى للسن) متبوعة بـValidation process completedفي سطر جديد
جرّب بنفسك
<?php
// قراءة المدخلات
$email = trim(fgets(STDIN));
$phone = trim(fgets(STDIN));
$minAge = intval(fgets(STDIN));
$actualAge = intval(fgets(STDIN));
// TODO: قم بإنشاء فئات استثناءات مخصصة هنا
// إنشاء فئة InvalidEmailException
// إنشاء فئة InvalidAgeException
// TODO: قم بإنشاء دالة validateUserData هنا
// يجب أن تقبل الدالة أربعة معاملات: email, phone, minAge, actualAge
// تنفيذ منطق التحقق داخل الدالة
// TODO: استخدم كتلة try...catch...finally لاستدعاء الدالة
// استدعاء validateUserData مع قيم المدخلات
// إضافة كتل catch لكل من InvalidEmailException و InvalidAgeException و Exception العام
// إضافة كتلة finally
?>جميع دروس 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'مراجعة: ترتيب لوحة المتصدرين