Ôn tập: Bộ sưu tập tùy chỉnh
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 50 trên 91.
Thử thách
DễHãy xây dựng một lớp Collection, kết hợp tất cả các phương thức ma thuật mà bạn đã học trong chương này. Bộ sưu tập của bạn sẽ hoạt động như một vùng chứa dữ liệu linh hoạt, dễ sử dụng: lưu trữ các mục theo khóa, kiểm tra xem chúng có tồn tại không, tìm mục một cách linh hoạt và tạo các bản sao độc lập.
Bạn sẽ tổ chức code trong hai tệp:
Collection.php: Tạo một lớpCollectionlưu trữ các mục trong một mảng riêng tư. Bộ sưu tập của bạn nên hỗ trợ các phương thức ma thuật sau hoạt động cùng nhau:__construct(): Nhận một mảng các mục ban đầu không bắt buộc (mặc định là mảng rỗng)__get($key): Trả về mục tại khóa đã cho, hoặcnullnếu mục đó không tồn tại__set($key, $value): Lưu giá trị tại khóa đã cho__isset($key): Trả về kết quả cho biết khóa có tồn tại trong bộ sưu tập hay không__unset($key): Xóa mục tại khóa đã cho__call($method, $args): Xử lý các phương thức tìm kiếm động. Khi gọi một phương thức bắt đầu bằngfindBy(chẳng hạn nhưfindByRolehoặcfindByStatus), hãy trích xuất tên trường (chuyển phần sau "findBy" thành chữ thường), tìm trong tất cả các mục và trả về khóa của mục đầu tiên có trường đó khớp với đối số đầu tiên. Trả vềnullnếu không tìm thấy kết quả khớp. Với bất kỳ phương thức nào khác, trả về"Unknown method: [method]"__toString(): Trả về"Collection([count] items)", trong đó count là số lượng mục__clone(): Khi được sao chép, mảng mục phải là một bản sao mới (không phải tham chiếu đến bản gốc)
main.php: Nạp tệp Collection. Bạn sẽ nhận ba đầu vào: tên khóa, giá trị vai trò và vai trò cần tìm. Tạo một bộ sưu tập người dùng và minh họa tất cả các phương thức ma thuật:- Tạo một
Collectionmới - Thêm một người dùng với khóa đầu vào, lưu một mảng có
"name"được đặt thành khóa và"role"được đặt thành giá trị vai trò đầu vào - Thêm một người dùng khác với khóa
"bob", lưu["name" => "Bob", "role" => "editor"] - In ra liệu khóa đầu vào có tồn tại hay không bằng
isset(): xuất"exists"hoặc"missing" - In ra kết quả gọi phương thức động
findByRole()với vai trò cần tìm làm đối số (phương thức này sẽ trả về khóa của người dùng khớp, hoặc không trả về gì nếu kết quả là null) - In bộ sưu tập bằng
echo(kích hoạt__toString) - Sao chép bộ sưu tập, sau đó bỏ đặt khóa đầu vào khỏi bản sao
- In ra liệu khóa đầu vào có tồn tại trong bộ sưu tập gốc hay không: xuất
"exists"hoặc"missing"(khóa này vẫn nên tồn tại vì bản sao độc lập)
- Tạo một
Mỗi kết quả đầu ra phải nằm trên một dòng riêng. Phương thức tìm kiếm động giả định mỗi mục trong bộ sưu tập là một mảng kết hợp có các trường như "name" và "role".
Tự làm thử
<?php
require_once 'Collection.php';
// Đọc dữ liệu đầu vào
$keyName = trim(fgets(STDIN));
$roleValue = trim(fgets(STDIN));
$searchRole = trim(fgets(STDIN));
// TODO: Tạo một Collection mới
// TODO: Thêm một người dùng với khóa đầu vào, lưu mảng có "name" => key và "role" => roleValue
// TODO: Thêm một người dùng khác với khóa "bob", lưu ["name" => "Bob", "role" => "editor"]
// TODO: Dùng isset() để kiểm tra khóa đầu vào có tồn tại hay không, rồi in ra "exists" hoặc "missing"
// TODO: In ra kết quả gọi findByRole() với đối số là searchRole
// TODO: Dùng echo để in ra tập hợp (kích hoạt __toString)
// TODO: Clone tập hợp, rồi xóa khóa đầu vào khỏi bản clone
// TODO: Kiểm tra khóa đầu vào có tồn tại trong tập hợp GỐC hay không, rồi in ra "exists" hoặc "missing"
?>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