Ankündigung

Einklappen
Keine Ankündigung bisher.

Klasse ändern

Einklappen

Neue Werbung 2019

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

  • Klasse ändern

    Mal angenommen ich hab 2 Klassen A und B. Die Klasse B ist von der Klasse A abgeleitet.

    Nun möchte ich, dass die Klasse A anhand ihrer Parameter entscheidet ob sie zur Klasse B wird.
    Oder anders gesagt ich möchte nicht jedes Mal explizit prüfen müssen welche Klasse ich nun verwenden muss.

    Kann ich die Klasse einfach durch folgende Anweisung ändern?
    Code:
    $this = new KlasseB($param1,...);
    Oder gibt es da elegantere Lösungen?

  • #2
    PHP-Code:
    <?php

    class class_A
    {

    }

    ?>
    PHP-Code:
    <?php

    class class_B extends class_A
    {

    }

    ?>
    PHP-Code:
    <?php

    if ( $A_isWanted )
    {
      
    $obj =& new class_A;
    }

    if ( 
    $B_isWanted )
    {
      
    $obj =& new class_B;
    }

    ?>
    Das ist da die einzige Möglichkeit

    Kommentar


    • #3
      Re: Klasse ändern

      Zitat von UniQ
      Nun möchte ich, dass die Klasse A anhand ihrer Parameter entscheidet ob sie zur Klasse B wird.
      klasse A ist und bleibt klasse A. genauso verhält es sich mit klasse B.

      Zitat von UniQ
      Oder anders gesagt ich möchte nicht jedes Mal explizit prüfen müssen welche Klasse ich nun verwenden muss.
      dann nehm klasse B, da ja sowieso auf die methoden etc. der klasse A zugegriffen werden kann.

      Zitat von UniQ
      Kann ich die Klasse einfach durch folgende Anweisung ändern?
      eventuell solltest du dir mal den unterschied zwischen klasse und objekt bzw. instanz einer klasse verdeutlichen.


      ich persönlich für bei dutzis beispiel noch ein
      PHP-Code:
      $obj null
      voransetzen.

      java verlangt das
      [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

      Kommentar


      • #4
        Naja hast schon recht, ich meinte Objekte

        Aber bei meinen "Problem" bin ich immernoch nicht weiter
        Ich hol am besten mal richtig aus.

        Es geht um eine Vereins-Klasse, die Daten zum Verein aus einer Datenbank lädt.
        Jetzt haben sich aber ein paar Leute zusammengesetzt und beschlossen das es auch Spielgemeinschaften gibt.
        Also hab ich mir gedacht, mach ich doch dafür eine Spielgemeinschaft-Klasse , die von der Vereinsklasse abgeleitet ist.

        Code:
        <?php
        
        class Verein
        {
        
            function Verein ($vereinsnummer)
            {
            }
        
        }
        
        ?>
        Code:
        <?php
        
        class Spielgemeinschaft extends Verein
        {
        
            function Spielgemeinschaft ($vereinsnummer)
            {
            }
        
        }
        
        ?>
        Ob das Objekt nun ein einfacher Verein ist oder eine Spielgemeinschaft hängt von der Vereinsnummer ab.

        Da ich nicht immer, wenn ich ein Vereins-Objekt erzeuge, explizit prüfen will ob das nun eine Spielgemeinschaft ist, wollte ich das irgendwie automatisch machen.

        Deshalb wollte ich halt einfach ein Vereins-Objekt erstellen, das bei Bedarf zu einen Spielgemeinschaft-Objekt mutiert.

        Wenn ich immer die Spielberichtsklasse nehme funktioniert das auch nicht, weil Methoden der Vereinsklasse überschrieben werden!

        Deshalb sehe ich jetzt 2 Möglichkeiten:
        • Ich erweitere die Vereinsklasse um eine statische Methode, die mir automatisch das richtige Objekt zurückliefert.
          Code:
          function getClub()
          {
              ...
              return $club;
          }
          find ich nicht so toll in der Handhabung, aber sicher am einfachsten


        • Ich prüfen bei allen Methoden, die die Spielgemeischaft-Klasse überschreiben würde, ob es sich um eine Spielgemeinschaft handelt und führe dann den entsprechenden Code aus.
          Code:
          function criticalMethod()
          {
              if (isSpielgemeinschaft()) {
                  [Spielgemeinschaft-Code]
              } else {
                  [Verein_Code]
              }
          }
          etwas unübersichtlicher Code


        Hat jemand andere Vorschläge, oder eine Meinung welche Variante besser ist

        Danke schonmal!

        Kommentar


        • #5
          du überprüfst, ob die vereinsnummer zu einer spielgemeinschaft gehört und erstellst dann entwder ein objekt der klasse verein oder der klasse spielgemeinschaft.

          PHP-Code:
          $Obj null;

          if ( 
          getInfoAboutClub() )
               
          $Obj = new Verein();
          else
               
          $Obj = new Spielgemeinschaft(); 
          in der funktion getInfoAboutClub() überprüfst du eben, ob es eine SG ist oder nicht.
          [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

          Kommentar


          • #6
            Zitat von UniQ
            s richtige Objekt zurückliefert.
            Code:
            function getClub()
            {
                ...
                return $club;
            }
            find ich nicht so toll in der Handhabung, aber sicher am einfachsten
            Schreib Factory dran und Du hast das bevorzugte Design Pattern für solche Fälle.
            mod = master of disaster

            Kommentar

            Lädt...
            X