Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - هيكلية الموظفين

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 26 من 91.

challenge icon

التحدي

سهل

لنبنِ نظامًا هرميًا للموظفين يجمع بين جميع مفاهيم الوراثة التي تعلمتها في هذا الفصل. ستنشئ فئة أساسية مجردة تحدد ما يجب أن يمتلكه كل موظف، ثم توسّعها بأنواع متخصصة من الموظفين تحسب المكافآت بطرق مختلفة.

ستنظم التعليمات البرمجية الخاصة بك عبر أربعة ملفات:

  • Employee.php: عرّف فئة Employee مجردة تعمل كأساس لجميع أنواع الموظفين. يجب أن تحتوي على الخاصيتين المحميتين $name و$salary. يستقبل constructor القيمتين ويضبطهما. أضف طريقة getName() التي returns الاسم، وطريقة getSalary() التي returns الراتب، وطريقة مجردة calculateBonus() يجب على الفئات الابنة Implement لها. أضف أيضًا طريقة getSummary() التي returns "[name] earns $[salary] with bonus: $[bonus]" حيث إن [bonus] هو ناتج استدعاء calculateBonus().
  • Manager.php: عرّف فئة Manager التي تمتد من Employee. أدرج ملف Employee في الأعلى. يتلقى Managers مكافأة قائمة على percentage. أضف خاصية محمية $bonusPercentage. يجب أن يقبل constructor الاسم والراتب ونسبة المكافأة: استخدم parent::__construct() للقيمتين الأوليين، ثم اضبط النسبة بنفسك. Implement calculateBonus() بحيث returns الراتب مضروبًا في نسبة المكافأة ومقسومًا على 100.
  • Developer.php: عرّف فئة Developer التي تمتد من Employee. أدرج ملف Employee في الأعلى. يتلقى Developers مكافأة fixed لإكمال project. أضف خاصية محمية $projectBonus. يجب أن يقبل constructor الاسم والراتب ومبلغ مكافأة project: استخدم parent::__construct() للقيمتين الأوليين، ثم اضبط مكافأة project بنفسك. Implement calculateBonus() بحيث returns ببساطة مبلغ مكافأة project الثابت.
  • main.php: أدرج ملفي Manager وDeveloper. ستتلقى ستة inputs: اسم manager، وراتب manager، ونسبة مكافأة manager، واسم developer، وراتب developer، ومكافأة project الخاصة بـ developer. أنشئ Manager وDeveloper باستخدام هذه القيم. اطبع نتيجة استدعاء getSummary() على manager أولًا، ثم على developer، بحيث يظهر كل منهما في سطر مستقل.

يوضح هذا التحدي كيف تفرض الفئات المجردة عقدًا: يجب أن يكون كل موظف قادرًا على حساب مكافأته، لكن تختلف منطقية الحساب حسب الدور. تستخدم Manager نسبة مئوية من راتبه، بينما يحصل Developer على مبلغ ثابت. تعمل طريقة getSummary() المشتركة في الفئة parent بسلاسة مع أي من عمليتي حساب المكافأة من خلال تعدد الأشكال.

جرّب بنفسك

<?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())
?>

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم PHP عبر الإنترنت