我有以下课程:
class Author {
public $id;
public $name;
}
class Article {
protected $author; // Author
protected $title; // String
public function __construct(Author $author, string $title)
$this->author = $author;
$this->title = $title;
}
}
要求是实施这些功能
Author
代表文章列表Author
Article
醇>
我首先考虑过上课:
class ArticleList {
public $author; // Author
private $articles = [];
public function addArticle(Article $article) {
$this->articles[] = $article;
}
}
但这似乎是错误的,不是吗?因为每个Article
已经有Author
,对我来说有点困惑,感谢帮助。
提前致谢!
答案 0 :(得分:1)
更新作者很简单,只需将方法setAuthor(Author $author)
添加到Article
类:
public function setAuthor(Author $author) {
$this->author = $author;
}
您实际上不需要ArticleList类中的作者信息。它足以仅将article对象赋予addArticle方法,因为您可以通过文章本身获取作者姓名。
以下代码适用于所有作者,而不仅仅是一个作者!
class ArticleList {
public $author;
private $articles = [];
public function addArticle(Article $article) {
$this->articles[$article->author->name] = $article;
}
public function getArticleByAuthor($author) {
if ($author instanceof Author) {
$author = $author->name;
}
return (isset($this->articles[$author])) ?
$this->articles[$author] : null;
}
}
此方法将返回给定作者的所有文章(您可以将作者名称或作者类的实例作为参数),如果没有找到,则返回null。