كما نعلم جميعا في لغات البرمجة كائنية التوجه php,java,python... نستطيع التعامل مع الكلاسات بطريقة رائعة و ممتعة من خلال عدة خصائص موجودة في هذه اللغات كـ extends مثلا
فلماذا نستخدمه؟ وماهو نفعه؟ وهل extends ضروري وبدونه لا يعمل الكود؟
مثال للتوضيح:
لدينا صنف (class) هو Fruit يحوي الكثير من الخصائص والدّوال (functions/methods).
ولدينا صنف آخر هو Orange، يجب أن يحوي جميع خصائص صنف Fruit بالإضافة لبعض الخصائص الإضافية مثل نوع معين للنكهة هي الحموضة والحلاوة.
يمكن أن يرث صنف Orange خصائص صنف Fruit عن طريق استخدام extends دون أن نعيد كتابة الخصائص والدوال من جديد.
هل اتضحت الفكرة بالمثال السابق؟
هي احد الوسائل التي تسعاعدك على تنفيذ مبدأ "لا تقم بإختراع العجلة"
الفائدة الأساسية من وراثة الفئة هي إعادة إستخدام جميع دوالها ومتغيراتها في الفئة الموروثة
أردت تجربة بسيطة لمدي للإستجابة للأسئلة التي تطرح هنا :) فكما يقولون موقع آريبيا هو stackoverflow العرب.
كلنا يعلم أن هذا السؤال بسيط جدا وفعلا يوجد من أجابني بشكل واضح لكن هنالك نسبة كبيرة تعلم الإجابة ولكنهم لم يضعوها، لسنا هنا للحديث عن سبب عدم الإجابة، لكن يجب إثراء المنصة بأكثر عدد من الإجابات الصحيحة و الأمثالية التي تبسط الفهم، وسأضع موضعا حول هذه النقطة لنناقشها :)
أما بالنسبة للـ extends فهو يمككنا من وراثة خاصيات ودوال صنف أخر، معني وراثة كلاس هي أخذ جميع ما بداخل أحد الأصناف من دوال ومتغيرات وإضافتها لكلاس جديد تكون الصغة العامة لكتابة extends بهذا الشكل -- ملاحظة المثال خاص بلغة php --
class new_class extends old_class
حيث old_class هو الصنف اﻷب الذي سيرث منه new_class جميع محتوياته.
لماذا نستخدمه كما قال الأخ ahmedsaoud31 كي لا نقوم بإختراع الجلة مرة أخرة أي أننا لا نعيد كتابة دوال عامة موجودة سابقا fأحد الأصناف في هذا الصنف (class) الجديد وأكثر مثال يوضح ذالك هي دالة الإتصال بقواعد البيانات فهي دائما دالة موحدة في السكريبت فعند الإتصال بقاعدة البيانات نقوم بإستدعائها دون أي تغيير في خصائصها وكذالك دوال حماية المدخلات وأي دالة أو متغير... يمكن إستخدامه مرة، فإذا كانت الدوال و المتغيرات موجودة سابقا فلماذا نعيد كتابتها مرة أخري ونخترع العجلة من جديد، من الأفضل الإنتفاع بإستخدام extends وفي مشاريعنا لتفادي ضياع الوقت في الكتابة وأيضا لتقليل اﻷأسطر البرمجية... لكنه ليس ضروريا أبدا يمكنك البرمجة دون إستخدامه.
لنلقي نظرة عن هذا المثال يوجد لدينا كلاس أب old_class و كلاس new_class هو الإبن الذي سيرث من أبيه جميع ممتلكاته أقصد محتوياته :D
جيد يوجد لدينا فنكشن للإتصال بقواعد البيانات و أخري لحماية المدخلات من الأكواد الضارةفي old_class. إن أردنا كتابة كلاس جديد بإسم new_claa وطبعا نريد أن نتصل بواعد البيانات و نحمي المدخلات ببساطة نرث محتويات old_class ونستخدمها في new_class لكن بشرط يجب أن تكون هذه الدوال عامة public . يمكن إستدعاء الدوال الخاصة بالصنف اﻷاب عبر إستخدام $this-> وبعده إسم الفنكشن أو من خلال parent:: ثم إسم الفنكشن
class old_class
{
public function connect(){
require ('config.php');
try {
$this->db = new PDO($dsn, $user, $password);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
public function catch($secure)
{
return htmlentities($secure, ENT_QUOTES, 'UTF-8');
}
........
.....
...
}
class new_class extends old_class
{
function fn1()
{
parent::connect();
}
function fn2()
{
$this->fn1();
$name = $this->catch($_POST['name']);
}
}
التعليقات