Avatar ·

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

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