Ankündigung

Einklappen
Keine Ankündigung bisher.

Einstieg in die objektorientierte Programmierung

Einklappen

Neue Werbung 2019

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

  • Einstieg in die objektorientierte Programmierung

    Hallo,

    mich beschäftigt momentan der Einstieg in die objektorientierte Programmierung. Bisher bin ich mit prozeduraler Programmierung soweit ganz gut hingekommen, allerdings möchte ich mich persönlich auch weiter entwickeln.
    Ich habe bereits durch Google einige Informationen erlangt (grundsätzlicher Aufbau einer Klasse, Getter & Setter, Autoloader) und habe eine Idee im Kopf, weiß allerdings nicht wie ich es umsetzen kann.

    Zur Ausgangssituation:

    Ich habe eine große Datenbank im Hintergrund mit vielen Stammdaten. Ein User soll in der Web-Anwendung selbstständig einen Spielstand starten bzw. laden können.

    Folgendermaßen habe ich mir das gedacht:

    1. User startet neuen Spielstand
    2. alle notwendigen Daten werden in Objekte usw. geladen
    3. Im Spielstand selbst sollen keine Datenbank-Abfragen oder ähnliches mehr vorhanden sein, sondern nur noch mit den Objekten gearbeitet werden
    4. Speichert der User den Spielstand, werden die Objekte in die Spielstands-Datenbank geschrieben

    Geht das so überhaupt?

  • #2
    Jop, geht so. Und sieht vom Prinzip auch ganz richtig aus.
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      Das freut mich schonmal, dass es überhaupt so umsetzbar ist.
      Allerdings habe ich durch Google nicht gefunden, wie man so etwas umsetzt.

      Der Logik nach müsste ich doch zunächst Klassen mit deren Eigenschaften bauen, die dann nach Spielstart in einem PHP Skript via der Setter gefüllt werden, oder?
      Jetzt gibt es zum Beispiel 5 verschiedene Gebäude. Wie speichere ich dann pro Gebäude alle notwendigen Informationen in dessen Eigenschaften?

      So wie im folgenden Beispiel dann?

      PHP-Code:
      class Bauobjekt {
          public 
      $BauobjekteID;
          public 
      $Bauobjekt;

          
      ### Getter & Setter Methoden ###
          
      public function __get($name) {
              if(
      array_key_exists($name$this->data)) {
                  return 
      $this->data[$name];    
              }
          }
          public function 
      __set($name,$value) {
              
      $this->data[$name] = $value;    
          }
      }

      $test = new Bauobjekt;
      $test->BauobjekteID 1;
      $test->Bauobjekt "Haus";
      echo 
      $test->BauobjekteID." - ".$test->Bauobjekt

      Kommentar


      • #4
        Die magischen Methoden __get() und __set() solltest du eher meiden, da sie erst zur Laufzeit evaluiert werden können und somit eine IDE keine brauchbare Hilfestellung und Fehlersuche dafür geben kann. Auch macht es den Code nicht sonderlich lesbar.

        Desweiteren solltest du dir besser angewöhnen alle Namen in englischer Sprache zu verfassen, sonst hat man so einen schrecklichen Sprachenmischmasch wie z.B. "value" und "Bauobjekt".

        Kommentar


        • #5
          Okay, wie gehe ich das denn ansonsten an?
          Hier mal ein Code, wie er aussehen müsste, in dem Teil, wo die Werte aus der Datenbank geholt werden.

          PHP-Code:
          class Building {
              public 
          $BuildingID;
              public 
          $Building;
              public 
          $MaxLevel;


          }

          $query mysqli_query($connection,"SELECT buildingid, building, max_level FROM buildings");
          while(
          $db $query->fetch_object()):
          //hier müssten dann meines Erachtens doch die Objekte gefüllt werden mit ihren Eigenschaften, oder?
          endwhile; 

          Kommentar


          • #6
            PHP-Code:
            class Building {
                public 
            $id;
                public 
            $name;
                public 
            $maxLevel;

            PHP-Code:
            $result $connection->query('
                SELECT id, name, max_level AS maxLevel
                FROM buildings
            '
            );

            $buildings = [];

            while (
            $building $result->fetch_object(Building::class)) {
                
            $buildings[] = $building;

            Kommentar


            • #7
              Also ich verstehe das jetzt so, dass der obere PHP-Code das Model für die Buildings ist und der untere PHP-Code wird dann in Schritt 2 (aus meinem ersten Beitrag) ausgeführt, richtig?
              Wie greife ich dann in der Anwendung selbst darauf zu, also bspw. im Rahmen einer Veränderung des max_level (ist jetzt nur ein Beispiel)? Hier bräuchte ich dann doch die Getter- und Setter-Methoden, oder? Und wie aktualisiere ich das max_level dann bei der richtigen ID?

              Kommentar


              • #8
                Basierend auf dem Code von hellbringer :

                Ausgabe aller Objekte:
                PHP-Code:
                foreach ($buildings as $building) {
                    
                var_dump($building);
                }
                /*
                 * object(Building)[1]
                 *   public 'id' => int 1
                 *   public 'name' => string 'Train Station' (length=13)
                 *   public 'maxLevel' => int 4
                 *
                 * object(Building)[2]
                 *   public 'id' => int 2
                 *   public 'name' => string 'Residence' (length=9)
                 *   public 'maxLevel' => int 7
                 *
                 * object(Building)[3]
                 *   public 'id' => int 3
                 *   public 'name' => string 'Town Hall' (length=9)
                 *   public 'maxLevel' => int 6
                 */ 
                Ausgabe einzelner Eigenschaften aus einem Objekt:
                PHP-Code:
                foreach ($buildings as $building) {
                    echo 
                'Building Name: '.$building->name."\n";
                }
                /*
                 * Building Name: Train Station
                 * Building Name: Residence
                 * Building Name: Town Hall
                 */ 
                Um auf das richtige Building zugreifen zu können, kannst du das Code-Beispiel von hellbringer folgend abändern:
                PHP-Code:
                while ($building $result->fetch_object(Building::class)) {
                    
                $buildings[$building->id] = $building;
                }

                // Nachträgliches Ändern einer Eigenschaft eines Objektes (Beispiel Building mit der ID 5)
                $buildings[5]->maxLevel 10
                Um auf ein Objekt via seiner Eigenschaft "Name" zugreifen zu können, solltest du eine weitere Klasse erstellen (Buildings), in welcher du die einzelnen Buildings speicherst. In dieser zusätzlichen Klasse kannst du dann eine Methode definieren, welche dir das entsprechende "Building" basieren auf dessen Name zurückgibt.

                Das gehört jedoch zu den OOP Grundlagen die du dir selbst aneignen solltest!
                Im Internet finden sich hierzu jede Menge Tutorials, also erwarte nicht, dass wir dir hier diese Grundlagen vermitteln!

                Kommentar


                • #9
                  Also ich verstehe wohl, was du da jetzt gemacht hast, allerdings würde ich mich freuen, wenn mir jemand erklären könnte, wie ich dies in meinem gegebenen Fall anwenden kann.
                  Folgendes habe ich nun erstellt:

                  Building.class.php
                  PHP-Code:
                  class Building {
                      public 
                  $building_id;
                      public 
                  $building;
                      public 
                  $max_level;

                  gamestart.php
                  PHP-Code:
                  $buildings = array();

                  $result mysqli_query($connection,"SELECT buildingid, building, max_level FROM buildings");
                  while(
                  $building $result->fetch_object(Building::class)):
                      
                  $buildings[$building->buildingid] = $building;
                  endwhile; 
                  Damit bekomme ich jetzt alle Buildings soweit in ein Objekt und kann auf deren Eigenschaften zugreifen. Wie greife ich denn jetzt global ingame auf dieses Objekt zu, bspw. in einem Skript, wo der Spieler diverse Bauobjekte ausbauen kann usw.?
                  Wäre super nett, wenn mir das jemand erklären könnte.

                  Kommentar

                  Lädt...
                  X