Menu
CoddyTech

回顾:组织良好的项目

本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 14 课,共 91 课。

challenge icon

挑战

简单

让我们构建一个完整的博客应用,合理组织命名空间,并综合运用你学过的命名空间、use 关键字和 PSR-4 自动加载。

你将创建一个结构清晰的项目,其中包含 5 个文件,展示真实的 PHP 应用如何组织代码:

  • src/Models/Author.php:在 Blog\Models 命名空间中定义一个 Author 类。它应该有一个 public $name 属性、一个接收并设置名称的构造函数,以及一个返回 "Author: [name]" 的 getBio() 方法。
  • src/Models/Post.php:在 Blog\Models 命名空间中定义一个 Post 类。它应该有 public $title 和 public $author 属性(其中 author 是一个 Author 对象)。构造函数接收标题和一个 Author 对象,并设置这两个属性。添加一个 getSummary() 方法,返回 "[title] by [author name]"。
  • src/Services/Publisher.php:在 Blog\Services 命名空间中定义一个 Publisher 类。它应该有一个 publish(Post $post) 方法,接收一个 Post 对象,并返回 "Published: [post title]"。由于 Post 类位于另一个命名空间中,你需要使用 use 关键字导入它。
  • vendor/autoload.php:使用 spl_autoload_register 创建一个 PSR-4 自动加载器,将 Blog\ 命名空间前缀映射到 src/ 目录。这个自动加载器可以自动加载你的所有类。
  • index.php:这是你的入口文件。引入自动加载器,然后使用 use 关键字导入 Blog\Models\Author、Blog\Models\Post 和 Blog\Services\Publisher。创建一个名为 "Jane Smith" 的 Author,使用这个作者创建一个标题为 "Getting Started with PHP" 的 Post,再创建一个 Publisher。打印作者简介、文章摘要和发布文章的结果(每项各占一行)。

注意,Publisher 服务依赖于 Post 模型。这说明不同命名空间中的类可以通过使用 use 语句导入所需内容,协同工作。

亲手试试

<?php
// 引入自动加载器
require_once 'vendor/autoload.php';

// TODO:使用 'use' 语句导入所需的类
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher

// TODO:创建一个名为 "Jane Smith" 的 Author

// TODO:使用该作者创建一个标题为 "Getting Started with PHP" 的 Post

// TODO:创建一个 Publisher

// TODO:输出作者的简介

// TODO:输出文章的摘要

// TODO:输出发布文章的结果
?>

面向对象编程中的所有课

自己练习: PHP 在线编译器