إنشاء استثناء مخصص
جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 56 من 68.
بينما تعمل فئة Exception المدمجة في PHP بشكل جيد لمعالجة الأخطاء العامة، فإن إنشاء فئات استثناءات مخصصة خاصة بك يوفر رسائل خطأ أكثر تحديداً ومعنى. تساعدك الاستثناءات المخصصة على التمييز بين أنواع المشكلات المختلفة في التعليمات البرمجية الخاصة بك ومعالجتها بشكل مناسب.
لإنشاء استثناء مخصص، يمكنك توسيع فئة Exception الأساسية في PHP باستخدام الكلمة المفتاحية extends. يمنح هذا التوريث استثناءك المخصص جميع وظائف الاستثناء القياسي مع السماح لك بإضافة سلوكك الخاص أو ببساطة توفير اسم أكثر وصفاً.
<?php
class InvalidEmailException extends Exception {
// يمكن أن يكون الكلاس فارغاً - فهو يرث كل شيء من Exception
}
// يمكنك أيضاً إضافة خصائص أو دوال مخصصة
class CustomException extends Exception {
public function getCustomMessage() {
return "Custom error: " . $this->getMessage();
}
}
?>تكمن قوة الاستثناءات المخصصة في أسمائها الوصفية والقدرة على التقاط أنواع استثناءات محددة. فبدلاً من التقاط Exception عام، يمكنك التقاط InvalidEmailException، أو DatabaseConnectionException، أو أي استثناء مخصص آخر تقوم بإنشائه. وهذا يجعل معالجة الأخطاء لديك أكثر دقة وكودك أكثر قابلية للصيانة.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلستتلقى مدخلاً واحداً: سلسلة نصية تمثل اسم فئة استثناء (exception class). سيكون هذا المدخل كلمة واحدة يجب استخدامها كاسم لفئة الاستثناء المخصصة الخاصة بك (مثال: NegativeBalanceException أو InvalidUsernameException).
اقرأ المدخل وقم بإنشاء فئة استثناء مخصصة باستخدام الاسم المقدم. يجب أن ترث فئة الاستثناء المخصصة الخاصة بك من فئة Exception الأساسية في PHP. بعد إنشاء الفئة، اطبع "Custom exception created: " متبوعاً باسم الفئة الذي تلقيته كمدخل.
تنسيق المدخلات: سطر واحد يحتوي على سلسلة نصية تمثل اسم فئة الاستثناء (مثال: InvalidAgeException)
المخرجات المتوقعة: Custom exception created: متبوعاً باسم فئة الاستثناء
ورقة مرجعية
لإنشاء استثناءات مخصصة في PHP، قم بتوسيع فئة Exception الأساسية باستخدام الكلمة المفتاحية extends:
<?php
class InvalidEmailException extends Exception {
// يمكن أن تكون الفئة فارغة - فهي ترث كل شيء من Exception
}
// يمكنك أيضًا إضافة خصائص أو طرق مخصصة
class CustomException extends Exception {
public function getCustomMessage() {
return "Custom error: " . $this->getMessage();
}
}
?>توفر الاستثناءات المخصصة رسائل خطأ أكثر تحديدًا ومعنى، مما يسمح لك بالتقاط أنواع استثناءات محددة بدلاً من كائنات Exception العامة. وهذا يجعل معالجة الأخطاء أكثر دقة والكود أكثر قابلية للصيانة.
جرّب بنفسك
<?php
// قراءة اسم فئة الاستثناء
$className = trim(fgets(STDIN));
// TODO: اكتب الكود الخاص بك أدناه لإنشاء فئة استثناء مخصصة
// عرض النتيجة
echo "Custom exception created: " . $className;
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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'مراجعة: ترتيب لوحة المتصدرين