sim*_*son 5 php oop inheritance class
我理解继承的基础知识,但这个让我感到困惑.你会怎么说:
我目前的代码只允许每个对象一首歌曲:
class Song extends Album{}
class Album extends Artist{}
Run Code Online (Sandbox Code Playgroud)
我确定我忽略了一些重要的事情.有什么想法吗?
我在PHP中这样做
Vic*_*let 24
专辑有一个或多个艺术家对象.继承意味着专辑是艺术家.你需要的是(编辑)聚合:
class Album
{
public $artists = array(); // Array of Artist instances
public $songs = array(); // Array of Song instances
}
Run Code Online (Sandbox Code Playgroud)
聚合意味着每个艺术家和歌曲实例可能属于其他专辑.通过合成,艺术家或歌曲可能属于单个专辑.
Tom*_*lis 13
正如我在其中一篇评论中提到的,如果你不得不通过OOP建模,我会说,
class Song {
string[] artists;
string title;
int genre;
}
class Album {
Song[] tracks;
}
Run Code Online (Sandbox Code Playgroud)
不要为这种关系使用遗产,为了所有油炸和充满美味的奶油!
一首歌不是专辑的延伸,它是专辑的一部分.同样,专辑不是艺术家的延伸,而是由艺术家创作的.此外,一首歌可以出现在多张专辑中,一张专辑可以有多位艺术家.
在这种情况下,您应该使用has-a关系而不是继承.例如,您可能有一个具有Song对象数组的Album对象作为成员.这将传达歌曲适当地属于专辑的想法.