第 6 章 · 综合实战 · 第 6.1 课
实战:待办清单
学了这么多零件,该组装一个完整的东西了。这一课写一个待办清单:能添加任务、标记完成、列出没做完的任务、给出统计。这是很多真实项目的雏形,只差把数组换成数据库(下一课就换)。
先想清楚结构,再写代码:
Task类表示一条任务:id、标题、是否完成。id 和标题创建后不再变,用readonly。TodoList类管理所有任务:内部用数组存Task对象,键是 id;再用一个计数器生成新 id。- 对外只暴露几个方法,内部数据全部
private。
先读一下这段示例,它演示了“用 id 做键”的好处:查找和修改都不用遍历。
练习 1
实现 TodoList
已通过补全 TodoList 的四个方法:
add(string $title): int:新建任务并保存,返回它的 id。id 从 1 开始递增。complete(int $id): void:把任务标记为完成。找不到时抛出InvalidArgumentException,消息是任务 {id} 不存在(例如任务 9 不存在)。pending(): array:返回所有未完成任务的标题组成的数组,按添加顺序,下标从 0 开始。summary(): string:返回形如3 项任务,已完成 1 项的统计。
检查会逐个测试这四个方法。可以先点“只运行”看看底部示例的输出。
选择题
为什么 $tasks 属性要设为 private,而不是 public?