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

مراجعة - آلة حاسبة بسيطة

جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 9 من 91.

challenge icon

التحدي

متوسط

قم ببناء فئة Calculator كاملة في ملف calculator.php توضح جميع مفاهيم البرمجة كائنية التوجه (OOP) التي تعلمتها. سيقوم ملف driver.php باستيراد واختبار فئتك.

يجب أن تتضمن فئة Calculator الخاصة بك ما يلي:

  1. خاصية (Property): خاصية public $result لتخزين المجموع الجاري.
  2. منشئ (__construct): تهيئة $result إلى 0 وطباعة "Calculator ready".
  3. مدمر (__destruct): طباعة "Calculator shutting down".
  4. أساليب (Methods) يستخدم كل منها $this لتحديث وإرجاع النتيجة:
    • add($number) — يضيف الرقم إلى النتيجة.
    • subtract($number) — يطرح الرقم من النتيجة.
    • multiply($number) — يضرب النتيجة في الرقم.
    • divide($number) — يقسم النتيجة على الرقم باستخدام القسمة الصحيحة (intdiv). إذا كان الرقم هو 0، اطبع "Error: Division by zero" وأرجع النتيجة دون تغيير.
    • clear() — يعيد تعيين النتيجة إلى 0.
    • getResult() — يرجع النتيجة الحالية.

يجب أن ترجع جميع الأساليب الحسابية النتيجة الجديدة بعد العملية.

مثال على الاستخدام:

require_once 'calculator.php';

$calc = new Calculator();  // prints: Calculator ready
$calc->add(5);             // result becomes 5
$calc->multiply(3);        // result becomes 15
$calc->subtract(2);        // result becomes 13
$calc->divide(0);          // prints: Error: Division by zero (result stays 13)
$calc->divide(2);          // result becomes 6 (integer division)
$calc->clear();            // result becomes 0
// When script ends: prints Calculator shutting down

جرّب بنفسك

<?php
require_once 'calculator.php';

$testCase = trim(fgets(STDIN));

if ($testCase == "constructor_test") {
    $calc = new Calculator();
    echo "Initial result: " . $calc->getResult() . "\n";
    echo "Calculator created successfully\n";

} elseif ($testCase == "addition_test") {
    $calc = new Calculator();
    $result1 = $calc->add(10);
    echo "After adding 10: " . $result1 . "\n";
    $result2 = $calc->add(5);
    echo "After adding 5: " . $result2 . "\n";
    echo "Final result: " . $calc->getResult() . "\n";

} elseif ($testCase == "subtraction_test") {
    $calc = new Calculator();
    $calc->add(20);
    $result1 = $calc->subtract(8);
    echo "After subtracting 8 from 20: " . $result1 . "\n";
    $result2 = $calc->subtract(2);
    echo "After subtracting 2: " . $result2 . "\n";
    echo "Final result: " . $calc->getResult() . "\n";

} elseif ($testCase == "multiplication_test") {
    $calc = new Calculator();
    $calc->add(5);
    $result1 = $calc->multiply(4);
    echo "After multiplying by 4: " . $result1 . "\n";
    $result2 = $calc->multiply(2);
    echo "After multiplying by 2: " . $result2 . "\n";
    echo "Final result: " . $calc->getResult() . "\n";

} elseif ($testCase == "division_test") {
    $calc = new Calculator();
    $calc->add(100);
    $result1 = $calc->divide(4);
    echo "After dividing by 4: " . $result1 . "\n";
    $result2 = $calc->divide(5);
    echo "After dividing by 5: " . $result2 . "\n";
    echo "Final result: " . $calc->getResult() . "\n";

} elseif ($testCase == "division_by_zero_test") {
    $calc = new Calculator();
    $calc->add(50);
    echo "Initial value: " . $calc->getResult() . "\n";
    $result = $calc->divide(0);
    echo "Result after division by zero: " . $result . "\n";
    echo "Value unchanged: " . $calc->getResult() . "\n";

} elseif ($testCase == "clear_test") {
    $calc = new Calculator();
    $calc->add(25);
    $calc->multiply(3);
    echo "Before clear: " . $calc->getResult() . "\n";
    $result = $calc->clear();
    echo "After clear: " . $result . "\n";
    echo "Current result: " . $calc->getResult() . "\n";

} elseif ($testCase == "comprehensive_test") {
    $calc = new Calculator();
    $calc->add(10);
    $calc->multiply(3);
    $calc->subtract(5);
    $calc->divide(5);
    echo "After sequence of operations: " . $calc->getResult() . "\n";
    $calc->divide(0);
    echo "After division by zero attempt: " . $calc->getResult() . "\n";
    $calc->clear();
    $calc->add(100);
    echo "After clear and add 100: " . $calc->getResult() . "\n";

} else {
    echo "Unknown test case\n";
}

جميع دروس Object Oriented Programming