تكرار السؤال: …
الإجابة المختصرة
تستخدم كلمة insteadof لتحديد الدالة الفائزة من السمة المحددة، وكلمة as لإعطاء اسم بديل (Alias) أو تغيير مستوى الرؤية للدالة الأخرى.
الشرح
الـ Traits هي آلية لإعادة استخدام الكود الأفقي في لغات الوراثة الأحادية. إذا اشتركت سمتان A و B في دالة بنفس الاسم doWork()، سيرمي المحرك Fatal Error عند استخدامها. الحل هو إعلان التفضيل الصريح داخل الفئة عبر insteadof واستخدام as لحفظ الدالة الأخرى باسم بديل.
مثال بالكود
class App {
use TraitA, TraitB {
TraitA::doWork insteadof TraitB;
TraitB::doWork as doWorkFromB;
}
}أخطاء شائعة
- استخدام Traits كبديل عشوائي للوراثة وحقن التبعيات مما يخلق كائنات ضخمة غير قابلة للاختبار.