الميراث مقابل. التركيب في PHP ?
عندما نقوم ببرمجة كائنية التوجه، من المهم أن نفهم الفرق بين الوراثة والتركيب:
إرث
ترث إحدى الفئات من فئة أخرى، وتعيد استخدام سلوكها وتوسعه.
class Motor { public function ligar() { return "Motor Ligado!"; } } class Carro extends Motor{} $carro = new Carro(); $carro->ligar();
تعبير
يحتوي الفصل على مثيلات لفئات أخرى لتفويض المسؤوليات. غالبًا ما يُفضل التركيب لإنشاء أنظمة أكثر مرونة وتجنب مشاكل الميراث العميق.
مثال عملي
هل سبق لك أن فكرت أنه عندما نبدأ تشغيل السيارة، فإننا في الواقع نقوم بتشغيل المحرك؟ باتباع هذا المنطق، يمكننا إنشاء شيئين: أحدهما يسمى المحرك والآخر يسمى السيارة. بهذه الطريقة، سيحتوي كائن السيارة على مثيل لكائن المحرك، والذي سيكون مسؤولاً عن تشغيل السيارة.
شفرة
class Motor { public function ligar() { return "Motor Ligado!"; } } class Carro { private Motor $motor; public function __construct(Motor $motor) { $this->motor = $motor; } public function ligar() { return $this->motor->ligar(); } }
فهم
بدلاً من أن تحتوي فئة السيارة على منطق تشغيل المحرك المدمج مباشرة، فإنها تقوم بتفويض هذه المسؤولية إلى كائن المحرك. يؤدي هذا إلى إبقاء فئة السيارة مركزة على ما يفترض أن تفعله، مما يجعل الكود أكثر نمطية وأسهل في الصيانة. في المستقبل، يمكنك تغيير أو تحسين المحرك دون تعديل رمز فئة السيارة.
الاختبار
$motorV4 = new Motor(); $carro = new Carro($motorV4); echo $carro->ligar(); // Saída: Motor Ligado!
المزايا
يعتبر هذا النهج أكثر مرونة لأنه يسمح للسيارة بالحصول على أنواع مختلفة من المحركات (على سبيل المثال، محرك V4 أو V6 أو محرك كهربائي) دون الحاجة إلى تغيير فئة السيارة. تسهل هذه الوحدة صيانة النظام وتوسيعه.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3