Objecten naar elkaar verwijzen
Op dit moment ben ik bezig met het maken van een klein game framework maar ik loop vast op het volgende;
Wat ik tot nu toe heb is een Game class en een Stage class. Elke Game kan meerdere Stages hebben.
Hetgeen ik nu graag zou willen is dat de Game een lijst heeft met al haar Stages, maar een Stage moet ook een verwijzing hebben naar de Game waar ze deel uit maakt.
De bovenstaande manier is waarop ik een Stage toevoeg aan een Game, maar nu moet de Stage ook een verwijzing hebben naar de Game, hoe kan ik dit het beste doen? (Het liefst met 1 method)
Alvast bedankt!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
class Stage
{
private $game;
public function __construct($game) {
$this->game = $game;
}
public function getNameOfGame() {
return $this->game->getName();
}
}
class Game
{
private $stages;
public function addStage($stage)
{
$this->stages[] = $stage;
}
public function getName()
{
return 'Pacman';
}
}
$game = new Game();
$stage = new Stage($game);
$game->addStage($stage);
echo $stage->getNameOfGame();
?>
class Stage
{
private $game;
public function __construct($game) {
$this->game = $game;
}
public function getNameOfGame() {
return $this->game->getName();
}
}
class Game
{
private $stages;
public function addStage($stage)
{
$this->stages[] = $stage;
}
public function getName()
{
return 'Pacman';
}
}
$game = new Game();
$stage = new Stage($game);
$game->addStage($stage);
echo $stage->getNameOfGame();
?>
Gewijzigd op 30/11/2014 13:34:48 door Frank Nietbelangrijk
De Game meesturen via de constructor probeerde ik eigenlijk te vermijden, maar als dat de enige oplossing is, dan moet het maar, bedankt voor je hulp! :P
Laat je deze property later setten dan weet je nooit of dit wel gebeurd is en moet je dat dus altijd controleren. Maar maak van die constructor simpel een setGame() functie en je kan het later doen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Create game
var game = new jFrame.Game('Game', '0.0.1', function()
{
// Add game to console
console.log(this);
// Create stage
var stageView = new jFrame.Stage(this, 'view', function()
{
// Add stage to console
console.log(this);
// Push stage
this.getGame().pushStage(this);
});
});
var game = new jFrame.Game('Game', '0.0.1', function()
{
// Add game to console
console.log(this);
// Create stage
var stageView = new jFrame.Stage(this, 'view', function()
{
// Add stage to console
console.log(this);
// Push stage
this.getGame().pushStage(this);
});
});
Is dit een beetje een handige manier / structuur om dit aan te pakken?