Ôn tập: Máy tính hình học
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 32 trên 91.
Thử thách
DễHãy tạo một chương trình tính diện tích hình, qua đó thấy được sức mạnh của giao diện trong việc xây dựng code linh hoạt, dễ mở rộng. Bạn sẽ tạo một giao diện (interface) quy định hợp đồng tính diện tích, rồi triển khai giao diện đó trong các lớp hình khác nhau.
Bạn sẽ sắp xếp code trong bốn tệp:
Calculable.php: Định nghĩa giao diệnCalculablevới một chữ ký phương thức duy nhất:calculateArea(). Hợp đồng này đảm bảo mọi hình có thể tính diện tích đều tính được diện tích của nó.Rectangle.php: Tạo lớpRectangletriển khaiCalculable. Hãy thêm tệp giao diện vào. Lớp này cần có các thuộc tính riêng tư$widthvà$height, được thiết lập qua hàm khởi tạo. Triển khaicalculateArea()để trả về diện tích, bằng chiều rộng nhân với chiều cao.Circle.php: Tạo lớpCircle, cũng triển khaiCalculable. Hãy thêm tệp giao diện vào. Lớp này cần có thuộc tính riêng tư$radius, được thiết lập qua hàm khởi tạo. Triển khaicalculateArea()để trả về diện tích bằng công thứcpi() * radius * radius.main.php: Thêm cả hai tệp hình vào. Tạo một hàm tên làdisplayArea, nhận một tham số kiểuCalculablevà tên hình (chuỗi). Hàm sẽ in ra:"[name] area: [area]", trong đó diện tích được làm tròn đến 2 chữ số thập phân bằngnumber_format().
Bạn sẽ nhận bốn đầu vào: chiều rộng hình chữ nhật, chiều cao hình chữ nhật, bán kính hình tròn và tên hình tròn. Tạo một Rectangle với chiều rộng và chiều cao (chuyển sang số thực), rồi tạo một Circle với bán kính (chuyển sang số thực). Gọi displayArea() hai lần: lần đầu với hình chữ nhật và tên "Rectangle", sau đó với hình tròn và tên hình được cung cấp. In mỗi kết quả trên một dòng riêng.
Hàm displayArea() hoạt động với mọi hình triển khai Calculable. Hàm không cần biết nó đang tính diện tích hình chữ nhật, hình tròn hay bất kỳ hình nào khác mà bạn có thể thêm sau này. Đó chính là ưu điểm của việc lập trình dựa trên giao diện!
Tự làm thử
<?php
// Nhúng các tệp hình dạng
require_once 'Rectangle.php';
require_once 'Circle.php';
// TODO: Tạo hàm (function) tên là displayArea
// Hàm nhận một tham số (parameter) kiểu Calculable và tên hình dạng dạng chuỗi
// In ra: "[name] area: [area]", trong đó diện tích được làm tròn đến 2 chữ số thập phân bằng number_format()
// Đọc dữ liệu đầu vào
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));
// TODO: Tạo Rectangle với chiều rộng và chiều cao
// TODO: Tạo Circle với bán kính
// TODO: Gọi displayArea() với hình chữ nhật, dùng "Rectangle" làm tên
// TODO: Gọi displayArea() với hình tròn, dùng tên hình dạng đã cho
?>Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa $thisPhương thứcThuộc tínhHàm khởi tạo (__construct)Hàm hủy (__destruct)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnTừ khóa parent::Ghi đè phương thứcTừ khóa finalLớp trừu tượngÔn tập: hệ thống phân cấp nhân viên7Đóng gói
Công khai, được bảo vệ, riêng tưTìm hiểu sâu về bộ điều chỉnh quyền truy cậpGetter và setterẨn thông tinRút gọn hàm khởi tạo (8.0)Ôn tập: hệ thống hồ sơ học sinh2Không gian tên và tự động nạp
Giới thiệu về không gian tênTừ khóa useChuẩn tự động nạp PSR-4Trình tự động nạp của ComposerÔn tập: dự án có tổ chức5Giao diện và hợp đồng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnGiao diện và lớp trừu tượngGợi ý kiểu với giao diệnÔn tập: Máy tính hình học8Phương thức ma thuật
Giới thiệu về phương thức ma thuật__toString và __debugInfo__get, __set, __isset, __unset__call và __callStatic__clone và sao chép đối tượng__serialize và __unserializeÔn tập: Bộ sưu tập tùy chỉnh3Thuộc tính của lớp
Thuộc tính instance và staticHằng số trong lớpPhương thức và thuộc tính staticThuộc tính private và protectedThuộc tính chỉ đọc (PHP 8.1)Ôn tập: Trình quản lý tài khoản ngân hàng6Đa hình
Xem lại việc ghi đè phương thứcĐa hình qua giao diệnGợi ý kiểu và kiểu hợpLiên kết tĩnh muộnÔn tập: bộ xử lý thanh toánTự luyện tập: Trình biên dịch PHP online