Bedingtes Vererben einer Klasse

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

  • Bedingtes Vererben einer Klasse

    Situation

    Vorhanden: Klasse1, Klasse2x

    Ziel: Klasse1 soll Klasse2x erben (class Klasse1 extends Klasse2x)

    Problem: Das Vererben soll bedingt werden durch das Ergebnis einer Funktion von Klasse1.

    Oder anders:

    Ist folgendes (in etwa irgend möglich):

    PHP-Code:
    class Klasse1 {

         var 
    foo;

         function 
    Foo($foo) {
              
    $this->foo $foo;
         }

         
    Klasse1 extends Klasse2.$this->foo;

    natürlich ist das Beispiel vereinfacht, hoffe ihr könnt folgen...
    Dieses Schreiben wurde automatisch erstellt und ist ohne Unterschrift gültig.

  • #2
    Ich wüsst jetzt nicht wie man das elegant lösen könnte, aber ich würd einfach die alten Eigenschaften löschen....
    Sehr schlichte Lösung, und ich vermute mal, dass du damit noch nicht an dein ziel kommst?
    Es ist nicht deine Schuld, dass die Welt ist, wie sie ist,
    Es wär nur deine Schuld, wenn sie so bleibt

    Kommentar


    • #3
      Original geschrieben von Rumo
      aber ich würd einfach die alten Eigenschaften löschen....
      Dieses Schreiben wurde automatisch erstellt und ist ohne Unterschrift gültig.

      Kommentar


      • #4
        Also wenn ich dich richtig verstanden hab (was bei mir leider oftmals nicht der Fall ist), dann willst du doch eine Klasse schreiben die eine zweite erweitert, oder?
        und ich würde nach der Vererbung mit dieser funktion eben überprüfen ob die klasse geerbt werden soll und wenn nich, dann die alten variablen löschen.

        EDIT:
        ach vergiss es. ich kenn mich mit Klassen in PHP nich so aus.
        Es ist nicht deine Schuld, dass die Welt ist, wie sie ist,
        Es wär nur deine Schuld, wenn sie so bleibt

        Kommentar


        • #5
          Also ich würde mal sagen, dass du entweder deine Klassen so erstellst, dass die Vererbung logisch ist - sprich alle Methoden werden vererbt - oder lässt lieber die Finger davon.
          Die Vererbung im OO-Konzept dient vor allem dazu aus allgemeinen Klassen spezialisiertere Klassen zu erstellen, die natürlich aber auch die allgemeinen Methoden benötigen bzw. diese evtl. überschreiben. Das ganze dient dazu einen logischen und wiederverwendbaren Code zu erzeugen, der somit auch leichter verständlich ist. Bedingtes ableiten ist mir nicht bekannt und ich glaube auch nicht, dass es sowas gibt geschweige denn, dass so etwas sinnvoll ist, sonst würde man wirklich alles aushebeln können.

          Programmiere lieber sauber, denn wenn das der Fall wäre, dann würdest du sofort sehen, dass die Vererbung in so einem Fall sicher nicht logisch ist.

          Grüße,
          tommie

          Kommentar


          • #6
            ok, ich sehe ein, dass es nicht möglich ist...

            sauber und logisch ist es allerdings trotzdem.

            danke.
            Dieses Schreiben wurde automatisch erstellt und ist ohne Unterschrift gültig.

            Kommentar


            • #7
              Original geschrieben von TheUser

              sauber und logisch ist es allerdings trotzdem.
              Erzähl mal, was du denn für einen Fall genau realisieren willst.

              Kommentar


              • #8
                das ist die lösung:

                PHP-Code:

                class klasse1
                {
                   function 
                klasse1($klas************)
                  {
                      
                $objectx = new $klas************;
                      return 
                $objectx;
                  }
                }


                $klasse1 klasse1::klasse1('irgendwas'); 
                wundert mich allerdings, warum das nicht direkt als konstruktor funktioniert, also

                PHP-Code:

                $klasse1 
                klasse1('irgendwas'); 
                Dieses Schreiben wurde automatisch erstellt und ist ohne Unterschrift gültig.

                Kommentar


                • #9
                  Original geschrieben von TheUser

                  wundert mich allerdings, warum das nicht direkt als konstruktor funktioniert, also

                  PHP-Code:

                  $klasse1 
                  klasse1('irgendwas'); 
                  weil wenn du es normal über den konstruktor laufen lässt, wird ja $klasse1 (bsp oben) zu der Instanz der klasse1...
                  bzw hat ein return da null Sinn!!

                  Kommentar


                  • #10
                    Ohjeohjeohje....

                    Der Konstruktor einer Klasse dient dazu die Attribute mit Standartwerten zu initialisieren und hat eigentlich nie einen Rückgabewert. Fast jede andere Programmiersprache würde dir da mit Fehler abbrechen.

                    Wenn $klasse1 = klasse1::klasse1('irgendwas'); funktioniert, kann das eigentlich nur bedeuten, dass php in diesem Fall die Funktion nicht als Konstruktor, sondern eben als Funktion betrachtet und deswegen einen statischen Aufruf erlaubt.

                    Ich würde dir dringend empfehlen dich ein wenig mit dem Sinn und Zweck der Objektorientierung auseinander zu setzen.

                    Grüße,
                    tommie

                    Kommentar


                    • #11
                      Original geschrieben von tommie82
                      Ohjeohjeohje....
                      re

                      Original geschrieben von tommie82

                      Der Konstruktor einer Klasse dient dazu die Attribute mit Standartwerten zu initialisieren und hat eigentlich nie einen Rückgabewert. Fast jede andere Programmiersprache würde dir da mit Fehler abbrechen.
                      das ganze läuft in der literatur unter dem kapitel "factory classes"
                      z.B. http://www.phppatterns.com/index.php...leview/49/1/1/

                      Original geschrieben von tommie82

                      Ich würde dir dringend empfehlen dich ein wenig mit dem Sinn und Zweck der Objektorientierung auseinander zu setzen.
                      du vielleicht auch

                      Dieses Schreiben wurde automatisch erstellt und ist ohne Unterschrift gültig.

                      Kommentar


                      • #12
                        Versteh ich jetzt nicht ganz was du meinst.
                        Das Beispiel zeigt doch nur, dass ich mit einem Objekt neue Instanzen einer Klasse erstellen kann. Wo wird da bitte im Konstruktor ein Rückgabewert (um den ging es ja) zurückgegeben? Das Beispiel zeigt sogar sehr schön, wie man sich mit Hilfe des Konstruktors seine Attribute initialisieren kann .

                        Kommentar


                        • #13
                          PHP-Code:
                          class MessageMaker {
                              
                          // The factory method...
                              
                          function & makeMessage () {
                                  try {
                                      
                          // Return a new instance of RandomMessage
                                      
                          return new RandomMessage();
                                  } catch ( 
                          RandomMessageException $exception ) {
                                      echo ( 
                          'A RandomMessage error occurred: '.$exception->toString() );
                                  )
                              }

                          es wird eine instanz zurückgegeben. darum geht es letztlich.
                          es ist zwar kein konstruktor, aber wo steht, dass ein konstruktor kein rückgabewert haben darf? (bitte um konkretes)

                          und wenn die klasse nur eine methode hat, wieso sollte es nicht der konstruktor sein?
                          Dieses Schreiben wurde automatisch erstellt und ist ohne Unterschrift gültig.

                          Kommentar


                          • #14

                            es wird eine instanz zurückgegeben. darum geht es letztlich.
                            es ist zwar kein konstruktor, aber wo steht, dass ein konstruktor kein rückgabewert haben darf? (bitte um konkretes)
                            Da hast du Recht, im Php-Handbuch steht tatsächlich nichts dazu, dass Konstruktoren keinen Rückgabewert haben dürfen/sollen und das Setzen von return xxx; führt auch zu keinem Fehler.


                            und wenn die klasse nur eine methode hat, wieso sollte es nicht der konstruktor sein?
                            Spricht ja nichts dagegen, ginge dann aber eher in die Richtung eines Structs (C) bzw. eines eigenen Datentyps.

                            Generell ist meiner Meinung nach php sowieso keine gute Grundlage über OO zu sprechen, weil php nicht OO ist (zumindest einschließlich php 4). IMHO dienen Konstruktoren für die korrekte Initialisierung von Objekten und das Setzen von einem Rückgabewert ist sicher nicht im Sinne des Erfinders.

                            Weil wie soll sich das Programm bei folgendem Aufruf denn verhalten: $myObj = new MyObj();, wenn der Konstruktor einen Rückgabewert hat. Dann müsste $myObj diesen Rückgabewert speichern und nicht das Objekt, womit ich mir ein Objekt in den Speicher gelegt habe, auf das ich nicht mehr zugreifen kann. Eingentlich total sinnfrei die Geschichte.

                            Gute Nacht,
                            tommie

                            Kommentar

                            Lädt...
                            X