Menu
CoddyTech

Ô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.

challenge icon

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ớp Author trong namespace Blog\Models. Lớp này cần có thuộc tính public $name, một hàm khởi tạo nhận và gán tên, cùng phương thức getBio() trả về "Author: [name]".
  • src/Models/Post.php: Định nghĩa lớp Post trong namespace Blog\Models. Lớp này cần có các thuộc tính public $title và public $author (trong đó author là một đối tượng Author). Hàm khởi tạo nhận tiêu đề và một đối tượng Author, rồi gán cả hai. Thêm phương thức getSummary() trả về "[title] by [author name]".
  • src/Services/Publisher.php: Định nghĩa lớp Publisher trong namespace Blog\Services. Lớp này cần có phương thức publish(Post $post) nhận một đối tượng Post và trả về "Published: [post title]". Bạn cần nhập lớp Post bằng từ khóa use vì 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ằng spl_autoload_register, ánh xạ tiền tố namespace Blog\ đến thư mục src/. 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óa use để nhập Blog\Models\Author, Blog\Models\Post và Blog\Services\Publisher. Tạo một Author tên là "Jane Smith", một Post có tiêu đề "Getting Started with PHP" và dùng tác giả đó, cùng một Publisher. 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

Tự luyện tập: Trình biên dịch PHP online