مراجعة - هيكلية الموظفين
جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 26 من 91.
التحدي
سهللنقم ببناء نظام تسلسل هرمي للموظفين يجمع بين جميع مفاهيم الوراثة التي تعلمتها في هذا الفصل. ستقوم بإنشاء فئة أساسية مجردة (abstract base class) تحدد ما يجب أن يمتلكه كل موظف، ثم تقوم بتوسيعها بأنواع موظفين متخصصين يحسبون المكافآت بشكل مختلف.
ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات:
Employee.php— قم بتعريف فئة مجردةEmployeeتعمل كأساس لجميع أنواع الموظفين. يجب أن تحتوي على خصائص محمية (protected) وهي$nameو$salary. يقبل المنشئ (constructor) كلتا القيمتين ويقوم بتعيينهما. قم بتضمين تابعgetName()يعيد الاسم، وتابعgetSalary()يعيد الراتب، وتابعاً مجرداًcalculateBonus()يجب على الفئات التابعة تنفيذه. أضف أيضاً تابعgetSummary()يعيد"[name] earns $[salary] with bonus: $[bonus]"حيث[bonus]هو نتيجة استدعاءcalculateBonus().Manager.php— قم بتعريف فئةManagerترث منEmployee. قم بتضمين ملف Employee في الأعلى. يتلقى المديرون مكافأة بناءً على نسبة مئوية. أضف خاصية محمية$bonusPercentage. يجب أن يقبل المنشئ الاسم والراتب ونسبة المكافأة — استخدمparent::__construct()لأول قيمتين، ثم قم بتعيين النسبة المئوية بنفسك. قم بتنفيذcalculateBonus()ليعيد الراتب مضروباً في نسبة المكافأة مقسوماً على 100.Developer.php— قم بتعريف فئةDeveloperترث منEmployee. قم بتضمين ملف Employee في الأعلى. يتلقى المطورون مكافأة ثابتة لإكمال المشروع. أضف خاصية محمية$projectBonus. يجب أن يقبل المنشئ الاسم والراتب ومبلغ مكافأة المشروع — استخدمparent::__construct()لأول قيمتين، ثم قم بتعيين مكافأة المشروع بنفسك. قم بتنفيذcalculateBonus()ليعيد ببساطة مبلغ مكافأة المشروع الثابت.main.php— قم بتضمين ملفي Manager و Developer. ستتلقى خمسة مدخلات: اسم المدير، راتب المدير، نسبة مكافأة المدير، اسم المطور، راتب المطور، ومكافأة مشروع المطور. قم بإنشاءManagerوDeveloperبهذه القيم. اطبع نتيجة استدعاءgetSummary()للمدير أولاً، ثم للمطور، كل منهما في سطر مستقل.
يوضح هذا التحدي كيف تفرض الفئات المجردة عقداً — يجب أن يكون كل موظف قادراً على حساب مكافأته، لكن منطق الحساب يختلف حسب الدور. يستخدم Manager نسبة مئوية من راتبه، بينما يحصل Developer على مبلغ ثابت. يعمل تابع getSummary() المشترك في الفئة الأب بسلاسة مع أي من حسابي المكافأة من خلال تعدد الأشكال (polymorphism).
جرّب بنفسك
<?php
require_once 'Manager.php';
require_once 'Developer.php';
// قراءة المدخلات
$managerName = trim(fgets(STDIN));
$managerSalary = floatval(trim(fgets(STDIN)));
$managerBonusPercentage = floatval(trim(fgets(STDIN)));
$developerName = trim(fgets(STDIN));
$developerSalary = floatval(trim(fgets(STDIN)));
$developerProjectBonus = floatval(trim(fgets(STDIN)));
// TODO: إنشاء كائن Manager باستخدام مدخلات المدير
// TODO: إنشاء كائن Developer باستخدام مدخلات المطور
// TODO: طباعة ملخص المدير (getSummary())
// TODO: طباعة ملخص المطور (getSummary())
?>جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsالكلمة المفتاحية $thisالـ Methodsالـ Propertiesالمنشئ (__construct)الهادم (__destruct)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةالكلمة المفتاحية parent::إعادة تعريف الدوال (Method Overriding)الكلمة المفتاحية finalالأصناف المجردة (Abstract Classes)مراجعة - هيكلية الموظفين7التغليف (Encapsulation)
العام، المحمي، الخاص (Public, Protected, Private)نظرة متعمقة على معدلات الوصولدوال Getters و Settersإخفاء المعلوماتميزة Constructor Promotion (8.0)مراجعة - نظام سجلات الطلاب10مفاهيم البرمجة كائنية التوجه المتقدمة
التركيب مقابل الوراثةحقن التبعيةالأصناف المجهولةالتعدادات (PHP 8.1)الألياف (PHP 8.1)تعمق في استنساخ الكائناتالمولدات والمكررات13أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط طريقة القالبنمط الحالةنمط التركيبنمط المستودع2مساحات الأسماء والتحميل التلقائي
مقدمة إلى مساحات الأسماءالكلمة المفتاحية useمعيار التحميل التلقائي PSR-4أداة التحميل التلقائي Composerملخص - مشروع منظم5الواجهات والعقود
مقدمة إلى الواجهاتتنفيذ الواجهاتتنفيذ واجهات متعددةالواجهة مقابل الـ Abstract Classالـ Type Hinting مع الواجهاتملخص - حاسبة الأشكال8الميثودات السحرية (Magic Methods)
مقدمة في الميثودات السحرية__toString و __debugInfo__get, __set, __isset, __unset__call و __callStatic__clone واستنساخ الكائنات__serialize و __unserializeمراجعة - Custom Collection3خصائص الكلاس
خصائص الـ Instance مقابل الخصائص الساكنة (Static)الثوابت في الكلاساتالدوال والخصائص الساكنة (Static)الخصائص الخاصة (Private) والمحمية (Protected)خصائص للقراءة فقط (Readonly) في PHP 8.1مراجعة - مدير الحساب البنكي6تعدد الأشكال (Polymorphism)
مراجعة إعادة تعريف الدوال (Method Overriding)تعدد الأشكال عبر الـ Interfacesتلميح النوع (Type Hinting) وأنواع الاتحاد (Union Types)الربط الاستاتيكي المتأخر (Late Static Binding)ملخص - معالج الدفع (Payment Processor)