Ôn tập: dự án có tổ chứ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 14 trên 91.
Thử thách
DễHãy xây dựng một ứng dụng blog hoàn chỉnh với cách tổ chức namespace hợp lý, kết hợp mọi điều bạn đã học về namespace, từ khóa use và cơ chế tự động nạp PSR-4.
Bạn sẽ tạo một dự án có cấu trúc tốt với năm tệp, minh họa cách các ứng dụng PHP thực tế tổ chức code:
src/Models/Author.php: Định nghĩa lớpAuthortrong namespaceBlog\Models. Lớp này cần có thuộc tínhpublic $name, một hàm khởi tạo nhận và gán tên, cùng phương thứcgetBio()trả về"Author: [name]".src/Models/Post.php: Định nghĩa lớpPosttrong namespaceBlog\Models. Lớp này cần có các thuộc tínhpublic $titlevàpublic $author(trong đó author là một đối tượngAuthor). Hàm khởi tạo nhận tiêu đề và một đối tượngAuthor, rồi gán cả hai. Thêm phương thứcgetSummary()trả về"[title] by [author name]".src/Services/Publisher.php: Định nghĩa lớpPublishertrong namespaceBlog\Services. Lớp này cần có phương thứcpublish(Post $post)nhận một đối tượngPostvà trả về"Published: [post title]". Bạn cần nhập lớpPostbằng từ khóausevì lớp này nằm trong namespace khác.vendor/autoload.php: Tạo một trình tự động nạp PSR-4 bằngspl_autoload_register, ánh xạ tiền tố namespaceBlog\đến thư mụcsrc/. Trình tự động nạp này xử lý việc nạp tất cả các lớp một cách tự động.index.php: Đây là điểm bắt đầu của ứng dụng. Nạp trình tự động nạp, sau đó dùng từ khóauseđể nhậpBlog\Models\Author,Blog\Models\PostvàBlog\Services\Publisher. Tạo mộtAuthortên là"Jane Smith", mộtPostcó tiêu đề"Getting Started with PHP"và dùng tác giả đó, cùng mộtPublisher. In tiểu sử của tác giả, phần tóm tắt của bài viết và kết quả xuất bản bài viết, mỗi nội dung trên một dòng riêng.
Lưu ý rằng dịch vụ Publisher phụ thuộc vào mô hình Post. Điều này cho thấy các lớp trong những namespace khác nhau có thể phối hợp với nhau bằng cách nhập những gì chúng cần qua các câu lệnh use.
Tự làm thử
<?php
// Nạp autoloader
require_once 'vendor/autoload.php';
// TODO: Nhập các lớp cần thiết bằng câu lệnh 'use'
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher
// TODO: Tạo một Author tên "Jane Smith"
// TODO: Tạo một Post có tiêu đề "Getting Started with PHP" với tác giả đó
// TODO: Tạo một Publisher
// TODO: In ra tiểu sử của tác giả
// TODO: In ra phần tóm tắt của bài viết
// TODO: In ra kết quả xuất bản bài viết
?>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