Ôn tập: hệ thống phân cấp nhân viê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 26 trên 91.
Thử thách
DễHãy xây dựng một hệ thống phân cấp nhân viên, kết hợp tất cả các khái niệm về tính kế thừa bạn đã học trong chương này. Bạn sẽ tạo một lớp cơ sở trừu tượng, định nghĩa những gì mọi nhân viên cần có, rồi mở rộng lớp đó bằng các kiểu nhân viên chuyên biệt, mỗi kiểu tính tiền thưởng theo cách khác nhau.
Bạn sẽ sắp xếp code trong bốn tệp:
Employee.php: Định nghĩa lớpEmployeetrừu tượng làm nền tảng cho mọi kiểu nhân viên. Lớp cần có các thuộc tính được bảo vệ là$namevà$salary. Hàm khởi tạo nhận cả hai giá trị và gán chúng. Thêm phương thứcgetName()để trả về tên, phương thứcgetSalary()để trả về mức lương và phương thức trừu tượngcalculateBonus()mà các lớp con phải triển khai. Ngoài ra, hãy thêm phương thứcgetSummary()để trả về"[name] earns $[salary] with bonus: $[bonus]", trong đó[bonus]là kết quả của việc gọicalculateBonus().Manager.php: Định nghĩa lớpManagermở rộng lớpEmployee. Thêm tệp Employee ở đầu tệp. Người quản lý nhận tiền thưởng dựa trên phần trăm. Thêm thuộc tính được bảo vệ$bonusPercentage. Hàm khởi tạo nhận tên, mức lương và phần trăm tiền thưởng: dùngparent::__construct()cho hai giá trị đầu tiên, sau đó tự gán phần trăm. Triển khaicalculateBonus()để trả về mức lương nhân với phần trăm tiền thưởng rồi chia cho 100.Developer.php: Định nghĩa lớpDevelopermở rộng lớpEmployee. Thêm tệp Employee ở đầu tệp. Nhà phát triển nhận khoản tiền thưởng cố định khi hoàn thành dự án. Thêm thuộc tính được bảo vệ$projectBonus. Hàm khởi tạo nhận tên, mức lương và số tiền thưởng dự án: dùngparent::__construct()cho hai giá trị đầu tiên, sau đó tự gán tiền thưởng dự án. Triển khaicalculateBonus()để chỉ trả về số tiền thưởng dự án cố định.main.php: Thêm cả hai tệp Manager và Developer. Bạn sẽ nhận sáu đầu vào: tên người quản lý, mức lương của người quản lý, phần trăm tiền thưởng của người quản lý, tên nhà phát triển, mức lương của nhà phát triển và tiền thưởng dự án của nhà phát triển. Tạo một đối tượngManagervà một đối tượngDevelopervới các giá trị này. In kết quả gọigetSummary()trên người quản lý trước, sau đó trên nhà phát triển, mỗi kết quả trên một dòng riêng.
Thử thách này cho thấy cách các lớp trừu tượng đặt ra một giao ước: mọi nhân viên đều phải có khả năng tính tiền thưởng, nhưng cách tính thay đổi tùy theo vai trò. Lớp Manager dùng một tỷ lệ phần trăm trên mức lương, còn lớp Developer nhận một khoản tiền cố định. Phương thức getSummary() dùng chung trong lớp cha hoạt động liền mạch với cả hai cách tính tiền thưởng nhờ tính đa hình.
Tự làm thử
<?php
require_once 'Manager.php';
require_once 'Developer.php';
// Đọc dữ liệu đầu vào
$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: Tạo đối tượng Manager từ dữ liệu đầu vào của người quản lý
// TODO: Tạo đối tượng Developer từ dữ liệu đầu vào của lập trình viên
// TODO: In ra bản tóm tắt của người quản lý (getSummary())
// TODO: In ra bản tóm tắt của lập trình viên (getSummary())
?>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