回顾:组织良好的项目
本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 14 课,共 91 课。
挑战
简单让我们构建一个完整的博客应用,合理组织命名空间,并综合运用你学过的命名空间、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 在线编译器