هل واجهات PHP لها خصائص؟




oop interface (4)

هل تحتوي واجهات PHP على خصائص ، أم أنها لا تحتوي إلا على طرق؟


السبب [الصالحة] لحاجة الخصائص في واجهة هو تحديد أن فئة DTO لها جانب معين ، على سبيل المثال IOrderable {OrderDate، OrderStatus}، IDeliverable {DeliveryAddress، Route، ...} ، إلخ. يمكن استخدام الجانب في عدد من DTOs مثل أمر المبيعات ، أمر العمل ، فواتير المبيعات ، إلخ. يمكن أن تدعم فئة DTO جوانب متعددة ، أي الميراث المتعدد المرغوب في فئات البيانات (ولكن ليس فئات التعليمات البرمجية). بعد ذلك ، يتم تأكيد عميل DTO أنه يمكنه مشاهدة DTO عبر هذا الجانب (عقد واجهة). هذا النموذج يلتزم كل 5 من مبادئ SOLID.

في PHP الأقرب لديك لخصائص الواجهة هي سمات http://php.net/manual/en/language.oop5.traits.php . مماثلة لواجهات ، لا يمكن إنشاء سمات ، ومع ذلك يمكن استخدامها مباشرة في الفصول دون تنفيذها.


يمكن أن تحتوي واجهات PHP على ثوابت ، ولكنها ليست خصائص (متغيرات الحالة). إذا لم تكن بحاجة إلى تعديل "الملكية" ، يمكنك استخدام ثابت بدلاً من ذلك.


يمكنك تعريف الخصائص في DocBlock للواجهة. بعد ذلك سيقوم IDE بإعلام هذه الخصائص للواجهة (PhpStorm) ولكن لن يؤدي ذلك إلى فرض التنفيذ الفعلي لهذه الحقول في الفئة التنفيذية. إي ز.

/**
 * @property string $password
 * @property string $username
 */
interface IUserDocument
{


}

ذلك يعتمد على ما تعنيه بكلمة "خصائص". إذا كنت تقصد الحقول الفعلية ، فعندئذ لا ، لا. إذا كنت تشير إلى خصائص مثل تلك الموجودة في C # ، فبإمكانك نعم (بما أن accessors (الخصائص) هي عبارة عن سكر نحوي بشكل صارم لطرق الملاءمة على أية حال). وينطبق نفس الأمر على الأحداث (على الرغم بالطبع ، في كل حالة ، لا يتم تحديد أي تنفيذ للحصول get / set أو add / remove الواصلين).

تحديث : بما أن PHP ليس لديها خصائص بمعنى get / set accessors ، فإن الإجابة على سؤالك لا. لا يمكن أن تحمل الواجهات بياناتها / حالتها الخاصة.





methods