Ôn tập: hệ thống hồ sơ học sinh
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 43 trên 91.
Thử thách
DễHãy xây dựng Hệ thống hồ sơ học sinh, kết hợp tất cả các khái niệm về tính đóng gói mà bạn đã học trong chương này. Bạn sẽ tạo một hệ thống được tổ chức tốt để quản lý dữ liệu học sinh an toàn, sử dụng tính năng khai báo thuộc tính trong hàm khởi tạo, thuộc tính riêng tư, getter và setter có xác thực, cùng với việc ẩn thông tin.
Bạn sẽ sắp xếp code trong ba tệp:
Student.php: Tạo lớpStudentbằng cách khai báo thuộc tính trong hàm khởi tạo cho$nameriêng tư (chuỗi) và$studentIdriêng tư (chuỗi). Đồng thời thêm thuộc tính mảng$gradesriêng tư (được khởi tạo là mảng rỗng). Học sinh cần có:getName(): trả về tên học sinhgetStudentId(): trả về mã học sinhaddGrade(int $grade): chỉ thêm điểm nếu điểm nằm trong khoảng từ 0 đến 100 (bao gồm cả hai đầu)getAverage(): trả về điểm trung bình của tất cả các điểm dưới dạng số thực (trả về 0.0 nếu chưa có điểm nào)getGradeCount(): trả về số điểm đã ghi nhận
Classroom.php: Tạo lớpClassroomđể quản lý danh sách học sinh. Dùng một mảng riêng tư để lưu học sinh. Thêm tệp Student vào. Lớp học cần có:- Hàm khởi tạo nhận
$roomNameriêng tư (chuỗi) bằng cách khai báo thuộc tính trong hàm khởi tạo addStudent(Student $student): thêm một học sinh vào lớp họcgetStudentCount(): trả về số học sinh đã đăng kýgetClassAverage(): tính điểm trung bình của điểm trung bình của tất cả học sinh (trả về 0.0 nếu không có học sinh hoặc không có điểm)getRoomName(): trả về tên lớp học
- Hàm khởi tạo nhận
main.php: Thêm tệp Classroom vào. Bạn sẽ nhận năm đầu vào: tên phòng, tên học sinh, mã học sinh và hai giá trị điểm. Tạo mộtClassroomvới tên phòng. Tạo mộtStudentvới tên và mã học sinh, thêm cả hai điểm (chuyển thành số nguyên), rồi thêm học sinh vào lớp học. In ra bốn dòng:- Tên phòng
- Tên học sinh, theo sau là điểm trung bình được định dạng với 1 chữ số thập phân:
"[name]: [average]" - Số điểm của học sinh đó
- Điểm trung bình của lớp được định dạng với 1 chữ số thập phân
Hệ thống này minh họa tính đóng gói đúng cách: điểm được bảo vệ khỏi việc chỉnh sửa trực tiếp, điểm trung bình được tính nội bộ mà không để lộ dữ liệu thô, và mọi dữ liệu đều đi qua các phương thức được kiểm soát. Lớp học không cần biết học sinh tính điểm trung bình như thế nào. Lớp chỉ cần lấy kết quả.
Tự làm thử
<?php
require_once 'Classroom.php';
// Đọc dữ liệu đầu vào
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));
// TODO: Tạo Classroom với tên phòng học
// TODO: Tạo Student với tên và ID
// TODO: Thêm cả hai điểm cho học sinh
// TODO: Thêm học sinh vào lớp học
// TODO: In ra tên phòng học
// TODO: In ra tên học sinh, tiếp theo là điểm trung bình được định dạng với 1 chữ số thập phân: "[name]: [average]"
// TODO: In ra số lượng điểm của học sinh đó
// TODO: In ra điểm trung bình của lớp với 1 chữ số thập phân
?>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