为可能非常简单的问题道歉。我试图了解OOP。我已经看过教程,但是其中许多教程都非常简化,通过给自己一个“真实的”项目,我遇到了很多教程似乎都无法涵盖的障碍。我有点希望了解以下情况:
如果我制作的是非常基本的体育游戏(例如FIFA),那么我目前有3个对象:
我触碰到了我的第一个了解壁垒,因为我不想让玩家简单地成为团队的延伸。毕竟,在现实生活中,我们都是人类的对象,具有的属性会告诉我们我们属于哪个团队,然后再成为团队的子对象。
最佳做法是什么?
我应该是:
这只是现在的大脑练习,所以我真的没有代码,但是
$team1 = new teamObject('red');
$player1 = new players('John');
$team1->addToTeam($player1);
这让我印象深刻,因为它无法工作,因为在teamObject类中,我无法在传递的播放器函数上调用任何播放器类函数吗?
答案 0 :(得分:2)
这对我来说通常是合理的:
$team1 = new teamObject('red');
$player1 = new players('John');
$team1->addToTeam($player1);
虽然通常看起来可能更像这样(但实际上是同一回事):
$team1 = new Team('red');
$player1 = new Player('John');
$team1->addPlayer($player1);
这让我印象深刻,因为它无法工作,因为在teamObject类中,我无法在传递的播放器函数上调用任何播放器类函数吗?
您当然可以调用播放器功能,因为在将播放器添加到团队后,团队将引用该播放器。它可以通过该引用简单地调用播放器函数。团队中的职能可能使用:
$this->players[0]->pretendToBeHurt();
在这种情况下,您绝对不想扩展团队。
答案 1 :(得分:1)
根据我的经验,许多初学者由于担心上过多的课而犯错。他们试图通过继承以某种方式“节省空间”,并最终以无意义的对象表示形式。
您正确地假设玩家不是团队的延伸。这些是2个不同的实体,因此无法接近4。
这些数据结构相互保留的方式实际上取决于实际的实现和数据模型。我不知道您对数据库和数据模型有多熟悉,但是我们这里是一个多对多关系:一个团队有很多球员,一个球员可以(在他的过程中生涯)属于多个团队。
如何在PHP对象中实现此关系只是您要使用的方式。您还会发现经常使用方法2和方法3将这些对象同时放在两个位置。
是的,那么您将拥有以下方法:
$player->addToTeam($team1);
$team->addPlayer($player);
$team->addPlayers([
$player1,
$player2
]);
(作为一个旁注,请看一下PSR编码标准,以大写形式和单数形式命名您的类:Player
,Team
,Pitch
。尽快获得回报。)