Ich versuche gerade meine OOP kenntisse etwas zu vertiefen. doch bin ich momentan nicht sicher, ob es der richtige weg ist den ich eingeschlagen habe. Ich werde es an einem trivialen Beispiel veruschen zu erklären.
Beispiel: Fussbalmanschaften. Eine Mannschaft enthält mehrere Spieler. Die Daten werden in Datenbank-Tabellen gespeichert. Hifür benötigen wir mind. Zwei Tabellen. Tablle Team und Tablle Players.
Tabelle teams:
Tabelle players:
Als erstes die Klasse für die Spieler:
Im Konstrukor wird einmal das Team Objekt übergeben und die id des Spielers. Anschließend wird die Methode getRow aufegrufen der den Datensatz in der Eigenschaft $playerRow zuweist. Die Anderen Methoden sind selbsterklärend.
Dei Klasse Team:
Dei Klasse Team erwartet ein Parameter, die ID des Teams. Anschließend wird, wie in der Klasse Players, die Methode getRow aufegrufen der den Datensatz in der Eigenschaft $teamRow zuweist. Es gibt weitere methode zum hinzufügen oder löschen eines Spielers wo ich hier nicht weiter eingehen werde. Die Methode getPlayers fragt die Spieler ids aus der Tabelle ab und ruft danach die getPlayer Methode auf. Die Methode getPlayer erwartet ein Parameter, die Id des Spielers und erzeugt eine Instanz aus der Player-Klasse wo er dann der Eigenschaft, das ein Array ist, zugeweist.
Nun das ist erstmal alles... Meine Frage lautet ist dieserWeg richtig oder sollte man es anders lösen. Wenn ja, wie?
cheers
Beispiel: Fussbalmanschaften. Eine Mannschaft enthält mehrere Spieler. Die Daten werden in Datenbank-Tabellen gespeichert. Hifür benötigen wir mind. Zwei Tabellen. Tablle Team und Tablle Players.
Tabelle teams:
Code:
+---------+-------------+ | team_id | team_name | +---------+-------------+
Code:
+-----------+---------+---------------+ | player_id | team_id | player_name | +-----------+---------+---------------+
PHP-Code:
class Player
{
/**
* Datenbankabstratkion
*/
var $db;
/**
* Das Team Objekt
*/
var $team;
/**
* Die Datenbank-Tabelle Players
*/
var $table;
/**
* Die Id des Spielers
*/
var $_playerid;
/**
* Der Datensatz des Speilers Tabelle
*/
var $playerRow;
/**
* Konstruktor
*
* @param object $team Das Team Objekt
* @param integer $id Die ID des Spielers
*/
function Player(&$team, $id)
{
$this->db = singelton('DB');
$this->team = & $team;
$this->table = 'players';
$this->_playerid = $id;
$this->getRow();
}
/**
* Liest den Datensatz und Speichert es der Eigenschaft $playerRow;
*/
function getRow()
{
$sql = "SELECT * FROM " . $this->table . " WHERE player_id = " . $this->_playerid;
/* etc */
}
/**
* Aktalisiert die Daten des Spielers
*/
function update($arrData)
{
$sql = "UPDATE " . $this->table . "
SET " . $this->db->biuldUpdateQuery($arrData) . "
WHERE player_id = " . $this->_playerid;
/* etc */
if ($this->db->affected() == 1) {
$this->getRow();
}
}
/**
* Liefert das TeamObjekt
*/
function & getTeam()
{
return $this->team;
}
}
Dei Klasse Team:
PHP-Code:
class Team
{
/**
* Datenbankabstratkion
*/
var $db;
/**
* Die Datenbank-Tabelle team
*/
var $teamTable;
/**
* Die Datenbank-Tabelle player
*/
var $playerTable;
/**
* Die Id des Spielers
*/
var $_teamid;
/**
* Der Datensatz des Speilers Tabelle
*/
var $teamRow;
/**
* Die Spieler
*/
var $players;
/**
* Konstruktor
*
* @param integer $id Die ID der Mannschaft
*/
function Player($id)
{
$this->db = singelton('DB');
$this->playerTable = 'players';
$this->teamTable = 'team';
$this->_teamid = $id;
$this->getRow();
}
/**
* Liest den Datensatz und Speichert es der Eigenschaft $teamRow;
*/
function getRow()
{
$sql = "SELECT * FROM " . $this->teamTable . " WHERE player_id = " . $this->_teamid;
/* etc */
}
/**
* Aktalisiert die Daten des Teams
*/
function update($arrData)
{
$sql = "UPDATE " . $this->teamTable . "
SET " . $this->db->biuldUpdateQuery($arrData) . "
WHERE team_id = " . $this->_teamid;
/* etc */
if ($this->db->affected() == 1) {
$this->getRow();
}
}
/**
* Fügt einen Neuen Speiler in der Tabelle player
*/
function insertNewPlayer($arrInsert)
{
/* etc */
return $this->db->insertID();
}
/**
* Lädt alle Spieler
*/
function getPlayers()
{
$sql = "select player_id from " . $this->playerTable .
" WHERE team_id = '" . $this->_teamid . "'";
/* etc */
while ($player = $this->db->fetchRow()) {
$this->getPlayer($id);
}
}
/**
* Lädt ein Spieler
*/
function & getPlayer($id)
{
return $this->players[$id] = & new Player($this, $id);
}
/**
* Löscht ein Spieler aus der Datenbak-Tabelle
*/
function deletePlayer($id)
{
/* etc */
if ($this->db->affected() == 1) {
$this->unsetPlayer($id);
}
}
/**
* Löscht ein Spieler aus der Eigenschaft players
*/
function unsetPlayer($id)
{
if (isset($this->players[$id])) {
unset($this->players[$id]);
}
}
}
Nun das ist erstmal alles... Meine Frage lautet ist dieserWeg richtig oder sollte man es anders lösen. Wenn ja, wie?
cheers
Kommentar