Menu
CoddyTech

Ôn tập: máy tính đơn giản

Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 9 trên 91.

challenge icon

Thử thách

Trung bình

Tạo một lớp Calculator hoàn chỉnh trong calculator.php, thể hiện tất cả các khái niệm OOP bạn đã học. Tệp driver.php sẽ nhập và kiểm thử lớp của bạn.

Lớp Calculator cần có:

  1. Thuộc tính: Một thuộc tính public $result để lưu tổng đang tính
  2. Hàm khởi tạo (__construct): Khởi tạo $result thành 0 và in ra "Calculator ready"
  3. Hàm hủy (__destruct): In ra "Calculator shutting down"
  4. Các phương thức đều dùng $this để cập nhật và trả về kết quả:
    • add($number): cộng số đó vào kết quả
    • subtract($number): trừ số đó khỏi kết quả
    • multiply($number): nhân kết quả với số đó
    • divide($number): chia kết quả cho số đó bằng phép chia nguyên (intdiv). Nếu số đó là 0, in ra "Error: Division by zero" và trả về kết quả không đổi
    • clear(): đặt lại kết quả thành 0
    • getResult(): trả về kết quả hiện tại

Tất cả các phương thức số học phải trả về kết quả mới sau phép toán.

Ví dụ sử dụng:

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

Tự làm thử

<?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";
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch PHP online