Avatar ·

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

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