我有两个相关的对象。相册 - >乐曲。一张专辑有很多歌。在专辑类中,我有一个名为GetSongs()的方法。这就是你所期望的。
我有一个基类,它包含我在所有对象中使用的通用功能。专辑和歌曲都扩展了这个对象。这里重要的方法是。
public function Get(){
return new static();
}
专辑和歌曲都有一个名为ByID($postid)
的方法。此方法将获取ID,从DB获取信息并填充空白对象。这允许我创建这样的专辑。这段代码工作正常。
$album = Album::Get()->ByID(1);
public function ByID($postid) {
$post = "sql to get info from db";
$this->Title = $post['title'];
.....
return $this;
}
当我调用名为GetSongs()
的方法时会出现问题。出于某种原因,此方法返回Album对象。
public function GetSongs()
{
$songresults = "SQL and other code to get the songs from the db";
$songs = array();
foreach($songresults as $song) {
$songs[] = Song::Get()->ByID($songresults["ID"]);
}
return $songs;
}
这看起来很简单,但我不明白发生了什么。 Song::Get()->ByID()
实际上是从Album对象而不是Song对象调用ByID方法,即使代码正在引用歌曲对象。