Avatar ·

السمات (Traits) مقابل الواجهات (Interfaces) في PHP: متى نستخدم أيهما؟

مرحباً بالجميع! أنا مطور PHP مبتدئ، وأخلط باستمرار بين متى يجب استخدام السمات (Traits) ومتى يجب استخدام الواجهات (Interfaces). يبدو أن كليهما يساعد في إعادة استخدام الكود، لكني أشعر أنهما شيئان مختلفان.\n\nإليكم مثال محدد. لدي كلاس `Car` وكلاس `Bicycle`. كلاهما يمكنه التحرك، لذا قمت بإنشاء واجهة `MovableInterface` مع دالة `move()`. هذا يعمل، لكن في كل كلاس يجب علي كتابة التنفيذ الخاص بي لدالة `move()`.\n\nثم تعلمت عن السمات (Traits). قمت بإنشاء سمة `EngineTrait` مع دالة `startEngine()`. الآن يمكنني إضافتها إلى كلاس `Car`، لكن ليس إلى `Bicycle`، لأن الدراجة لا تحتوي على محرك. وهنا فكرت: ألم يكن من الأفضل جعل `startEngine()` دالة في واجهة؟ لكن عندها سأضطر لتنفيذها أيضاً في `Bicycle`، حيث أنها غير ضرورية.