I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

الفرق بين الكلاس المجرد (Abstract Class) والواجهة (Interface) في لغة PHP

الفرق بين الكلاس المجرد (Abstract Class) والواجهة (Interface) في لغة PHP أهلاً بيك يا صديقي المبرمج. أكيد في يوم من الأيام وأنت بتبني نظام ضخم باستخدام البرمجة

الفرق بين الكلاس المجرد (Abstract Class) والواجهة (Interface) في لغة PHP
Reading Count: 17

الفرق بين الكلاس المجرد (Abstract Class) والواجهة (Interface) في لغة PHP

أهلاً بيك يا صديقي المبرمج. أكيد في يوم من الأيام وأنت بتبني نظام ضخم باستخدام البرمجة الكائنية (Object Oriented Programming - OOP) وقفت قدام سؤال محير: أعمل كلاس أب (Parent Class) ولا أعمل واجهة (Interface)؟ الموضوع ده بيعمل "لخبطة" كبيرة عند ناس كتير، والفرق بينهم مش مجرد فرق نظري، ده فرق في "عمارة الكود" بتاعك (Code Architecture) وقدرته على التوسع والتحمل.

في المقال ده، هنشرح الفرق بينهم بأسلوب بسيط جداً، ونعرف إمتى تستخدم ده وإمتى تستخدم ده عشان تطلع كود نظيف (Clean Code) ومحترف.

يعني إيه كلاس مجرد (Abstract Class)؟

الـ Abstract Class هو كلاس مش بنقدر ناخد منه نسخة (Instance) مباشرة، يعني ما ينفعش تقول new AbstractClass(). الهدف الأساسي منه إنه يكون "قالب" (Template) للكلاسات اللي بتورث منه. الـ Abstract Class بيسمحلك تحط كود مشترك (Method implementation) وكود تاني "مجرد" لازم الكلاس اللي يورث منه يكتبه بنفسه.

تخيل عندك نظام لشركة فيها موظفين: مدير، ومحاسب، ومبرمج. كلهم ليهم اسم ورقم وظيفي، لكن كل واحد فيهم بيقبض بطريقة مختلفة. هنا الـ Abstract Class هو الحل المثالي عشان توحد الصفات المشتركة.


abstract class Employee {
    public $name;
    
    public function sayHello() {
        return "أهلاً بك يا " . $this->name;
    }
    
    abstract public function calculateSalary();
}

يعني إيه واجهة (Interface)؟

الـ Interface هي "عقد" (Contract) بتفرضه على أي كلاس يستخدمها. هي ما فيهاش كود جاهز، هي مجرد قائمة بأسماء الدوال (Methods) اللي لازم الكلاس يلتزم بتنفيذها. الميزة العظيمة هنا إن الكلاس في PHP ممكن يعمل (Implement) أكتر من Interface في نفس الوقت، وده بيحل مشكلة الـ (Multiple Inheritance) اللي مش موجودة في PHP.


interface Loggable {
    public function logMessage($message);
}

class User implements Loggable {
    public function logMessage($message) {
        // تنفيذ عملية الحفظ في ملف Log
    }
}

إيه الفرق الجوهري بينهم؟ (أهم الفروقات التقنية)

عشان نلخص الموضوع في نقاط محددة وسريعة:

  • الوراثة (Inheritance): الكلاس يقدر يورث من Abstract Class واحد فقط (extends)، لكن يقدر يعمل Implement لأي عدد من الـ Interfaces.
  • الكود المشترك: الـ Abstract Class بيقدر يشيل "كود حقيقي" (Methods with body)، بينما الـ Interface بيشيل "أسماء دوال" بس (Signatures).
  • الهدف: الـ Abstract Class بيستخدم لما تحب تقول إن الكلاسات دي "هي أصلاً من نفس النوع". الـ Interface بيستخدم لما تحب تقول إن الكلاس ده "بيقدر يعمل الوظيفة دي" بغض النظر عن نوعه.

إمتى تختار Abstract Class وإمتى تختار Interface؟

بص يا سيدي، القاعدة الذهبية بتقول:

استخدم Abstract Class لو عندك كلاسات ليها نفس الصفات وبتحتاج كود مشترك (مثلاً كلاسات الـ Database Drivers أو الـ Controllers الأساسية). ده بيوفر عليك إعادة كتابة الكود (Code Duplication).

استخدم Interface لو عايز تخلي الكلاسات بتاعتك "مرنة" (Flexible) وتقدر تستخدمها في سياقات مختلفة. مثلاً، لو عندك خاصية زي (SendEmail) أو (ExportToPDF)، دي سلوكيات ممكن أي كلاس يحتاجها، فبدل ما تخليهم يورثوا من كلاس واحد، خليهم يعملوا Implement للـ Interface ده.

نصيحة من أخ لمطور المستقبل

يا صديقي، البرمجة مش بس إنك تكتب كود يشتغل، البرمجة هي إنك تكتب كود "يعيش". لما تبدأ تعتمد على الـ Interfaces في شغلك، هتحس إن الكود بتاعك بقى (Decoupled) يعني المكونات مش معتمدة على بعض بشكل خانق، وده هيخليك تقدر تعدل في أي جزء من النظام من غير ما تكسر باقي الأجزاء. ما تخافش من التعقيد، ابدأ بتطبيق المفاهيم دي في مشروعك الجاي، وهتلاقي الفرق بنفسك في سهولة الصيانة (Maintenance).

بالتوفيق في رحلتك البرمجية، ولو عندك أي سؤال سيبهولي في التعليقات!


Share

Related posts

Apr 26, 2026 • 1 min read
Reading Count: 4
إزاي تكتب كود PHP نظيف (Clean Code) وتخلص من كابوس الـ Spaghetti Code

إزاي تكتب كود PHP نظيف (Clean Code) وتخلص من كابوس الـ Spaghetti Code أكيد مريت بالموقف ده قبل كدة،...

Apr 25, 2026 • 1 min read
Reading Count: 245
ليه لازم تنقل مشاريعك لـ PHP 8 فوراً؟ التغيير اللي هيخليك تحب البرمجة تاني

ليه لازم تنقل مشاريعك لـ PHP 8 فوراً؟ التغيير اللي هيخليك تحب البرمجة تاني لو كنت مبرمج بقالك فترة ب...

Apr 25, 2026 • 1 min read
Reading Count: 87
ازاي تبني تطبيق SaaS بـ Laravel: دليلك العملي للمحترفين

ازاي تبني تطبيق SaaS بـ Laravel: دليلك العملي للمحترفين كتير مننا كمبرمجين بيحلم يعمل منتج خاص بيه،...