php4 Objekte

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • php4 Objekte

    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:
    Code:
    +---------+-------------+
    | team_id | team_name   |
    +---------+-------------+
    Tabelle players:
    Code:
    +-----------+---------+---------------+
    | player_id | team_id |  player_name  |
    +-----------+---------+---------------+
    Als erstes die Klasse für die Spieler:
    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;
        }

    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:
    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]);
            }
        }

    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
    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
    PHP Sicherheit
    PHPUnit[1-2]
    Professionelle Softwareentwicklung mit PHP 5
    Professionelle PHP 5-Programmierung

  • #2
    Hat keiner daran was auszusetzen, oder habe ich mein Porblem nicht richtig ausgedrückt?
    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
    PHP Sicherheit
    PHPUnit[1-2]
    Professionelle Softwareentwicklung mit PHP 5
    Professionelle PHP 5-Programmierung

    Kommentar


    • #3
      1. Hat keiner Lust, sich soviel text/Quellcode anzuschauen,

      2. hast du lediglich die zugriffe auf die Datenbank abstrahiert oder ?

      ka was man dazu sagen soll ^^

      solange es funzt, mach weiter


      An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

      Kommentar


      • #4
        Original geschrieben von MaxP0W3R
        solange es funzt, mach weiter
        Du hast leicht reden. Wenn sich nach einem Monat feststellt, dass das Konzept falsch ist, liege ich Zwei Monate zurück.

        Meine Befürchtung ist, ein Overhead der MySQL Datenbank auszulösen, sobald die Team-Klasse alle Spieler einladen will. Da jedesmal, wenn eine Instantz der Spieler-Klasse erstellt wird, der Datansatz für den Spieler abgefragt wird. Wenn es möglich ist möchte ich diesen Vorgang besser Optimieren.
        Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
        PHP Sicherheit
        PHPUnit[1-2]
        Professionelle Softwareentwicklung mit PHP 5
        Professionelle PHP 5-Programmierung

        Kommentar


        • #5
          da ich nicht weiss was du vorhast, kann ich auch nicht beurteilen, ob deine planung so richtig ist...

          was soll denn dein endprodukt machen ?


          An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

          Kommentar


          • #6
            Es geht mir nur um den Weg der zum Ergebniss führt. In diesen Fall z.B. ist es eine Fussballliga, aber es kann auch ein Newsskript mit verschieden Kategorien sein. Kategorie=Team und Artikel=Spieler.
            Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
            PHP Sicherheit
            PHPUnit[1-2]
            Professionelle Softwareentwicklung mit PHP 5
            Professionelle PHP 5-Programmierung

            Kommentar


            • #7
              Ich würde sagen, Team ist einfach eine Eigenschaft eines Spielers


              Weiss gar nicht was es da jetz gross zu überlegen gibt, in der Klasse Spieler werden alle Spielerfunktionen gekapselt und in der Klasse team alle teamfunktionen


              in der klasse spieler brauchst du einfach die id des teams als eigenschaft, nicht das komplette objekt

              Die Klasse SPieler benutzt du nur für rein Spielerspezifische Funktionen und die Klasse team nur für Teamspezifische Funktionen, also wenndu einen einzelnen spieler bearbeitest, dann brauchst du die Klasse team in diesem Moment nicht


              An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

              Kommentar


              • #8
                Original geschrieben von MaxP0W3R
                in der klasse spieler brauchst du einfach die id des teams als eigenschaft, nicht das komplette objekt

                Die Klasse SPieler benutzt du nur für rein Spielerspezifische Funktionen und die Klasse team nur für Teamspezifische Funktionen, also wenndu einen einzelnen spieler bearbeitest, dann brauchst du die Klasse team in diesem Moment nicht
                Nicht Ganz um ein Spieler erstmal bearbeiten zu können, muss man erstmal das Team, wo der Spieler momentan ist, kennen. Es sei denn, es wird über eine Suchfunktion direckt auf den Spieler "verwiesen".
                Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
                PHP Sicherheit
                PHPUnit[1-2]
                Professionelle Softwareentwicklung mit PHP 5
                Professionelle PHP 5-Programmierung

                Kommentar


                • #9
                  die team_id wird doch sicher in der Tabelle ´spieler´gespeichert oder ?


                  An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                  Kommentar


                  • #10
                    Original geschrieben von MaxP0W3R
                    die team_id wird doch sicher in der Tabelle ´spieler´gespeichert oder ?
                    Logischerweise ja. Doch was, wenn man z.B. zusätzlich den Name der Mannschaft anzeigen möchte oder das Wappen vieleicht auch den Tabellenplatz.
                    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
                    PHP Sicherheit
                    PHPUnit[1-2]
                    Professionelle Softwareentwicklung mit PHP 5
                    Professionelle PHP 5-Programmierung

                    Kommentar


                    • #11
                      wenn du dir die daten zu einem spieler anschauen willst, dann hast du ja die id von seinem team und kannst dann in deinem objekt der klasse spieler anhand dieser id ein objekt der klasse team erzeugen, dass du dann für diese daten benutzt und anschließend wieder freigibst
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Die Daten frägst du einfach mit JOINS ab, oder übergibst dem Objekt Team die ID und der Spuckt dann alle Team-Daten aus...


                        An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                        Kommentar


                        • #13
                          Original geschrieben von mrhappiness
                          wenn du dir die daten zu einem spieler anschauen willst, dann hast du ja die id von seinem team und kannst dann in deinem objekt der klasse spieler anhand dieser id ein objekt der klasse team erzeugen, dass du dann für diese daten benutzt und anschließend wieder freigibst
                          Das wäre natürllich auch eine möglichkeit. Nur ist dann wieder der Fall, wenn ich von der Team-Klasse ein Spieler-Klasse instanziere, und diese Speilerinstanz einem anderem Objekt übergebe und dieses Objekt von dem Spieler das Team haben möchte muss eine Weitere instanz der Team-Klasse erstellen werden. Jetzt gehen wir weiter, nun sagen wir dieses Objekt ändert am der übergeben Team-klasse was, z.B. den Namen der Manschaft, die erste Teaminstanz krigt davon nichts mit, weil es keine referenz gibt. Ich hoffe man kann es nachvollziehen.
                          Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
                          PHP Sicherheit
                          PHPUnit[1-2]
                          Professionelle Softwareentwicklung mit PHP 5
                          Professionelle PHP 5-Programmierung

                          Kommentar


                          • #14
                            Original geschrieben von MaxP0W3R
                            Die Daten frägst du einfach mit JOINS ab, oder übergibst dem Objekt Team die ID und der Spuckt dann alle Team-Daten aus...
                            Dafür gibt es ja die Team-Klasse
                            Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
                            PHP Sicherheit
                            PHPUnit[1-2]
                            Professionelle Softwareentwicklung mit PHP 5
                            Professionelle PHP 5-Programmierung

                            Kommentar


                            • #15
                              Original geschrieben von schlimmerfinger
                              [pipi im auge ] weil es keine referenz gibt
                              dann mach ne referenz draus
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X