Mehrere Klassen weitervererben

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

  • Mehrere Klassen weitervererben

    Hallo!

    Normalerweise kann ich in PHP ja eine Klasse weitervererben, indem ich bei der Definition der erbenden Klasse diese mit extends engebe.
    Nun möchte ich, dass eine Klasse von 2 anderen Klassen erbt. Dazu habe ich versucht, diese weitere Klasse ebenso hinzuzufügen (durch Komma bzw. Leerzeichen getrennt, also z.B. class a extends b, c). Das scheint jedoch nicht zu funktionieren, da PHP dabei Fehler meldet.

    Gibt es überhaupt eine Möglichkeit, eine Klasse von mehreren Klassen erben zu lassen und wie geht dies? Danke!


    MfG
    Pascal
    Interessantes aus den Themenbereichen Computer, Internet und Programmierung unter
    http://www.it-blog.net

  • #2
    Nein, in PHP kann jede Klasse nur von einer Klasse erben.
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Wie könnte ich dies denn alternativ lösen? Die einzige Möglichkeit, die mir dazu einfällt, wäre eine "Kettenvererbung" also class a > class b > class c.
      Lieber wäre mir jedoch eine andere Möglichkeit.

      MfG
      Pascal
      Interessantes aus den Themenbereichen Computer, Internet und Programmierung unter
      http://www.it-blog.net

      Kommentar


      • #4
        die einfach vererbung gibts aus gutem grund. sie macht dir einige sachen leichter. übrigens nicht nur bei PHP.

        Kommt drauf an, was du realisieren willst.

        normalerweise gibt es keinen grund von mehreren klassen zu erben. da macht es eher sinn, zwei klassen zu vereinen. dass wäre dann das von dir erwähnte class c extends b, b extends a.

        Was willst du denn umsetzen?

        Kommentar


        • #5
          Ich hab eben eine Klasse, die Funktionen zur Pflege von Temindaten in einer Datenbank enthält. Diese greift wiederum auf eine Klasse zu, die die entsprechenden MySQL-Abfrage-Funktionen bereitstellt. Zusätzlich dazu möchte ich in meiner Terminverwaltungsklasse aber auch eine Klasse mit "Standardfunktionen" verwenden, die verschiedene häufig verwendete Funktionen enthält.
          Interessantes aus den Themenbereichen Computer, Internet und Programmierung unter
          http://www.it-blog.net

          Kommentar


          • #6
            Und so geht's ned ?
            PHP-Code:
            class MySql extends Standartfkt
            class Termindaten extends MySql 
            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Das war ja die Geschichte mit der "Kettenvererbung" s.o. Diese Möglichkeit hab ich nur noch nicht versucht...
              Interessantes aus den Themenbereichen Computer, Internet und Programmierung unter
              http://www.it-blog.net

              Kommentar


              • #8
                Im sinne der OOP macht es aber wenig sinn, einer Termin-Klasse die methoden der SQL-Klasse zu vererben.

                Du wirst sicher nicht auf die Idee kommen, später mittels $Termin->getNumRows() die Anzahl der zurück gegebenen Zeilen eine Abfrage X zu holen.

                Vielleicht ist das Singleton Pattern eine alternative.

                Kommentar


                • #9
                  In meiner SQL-Klasse werden ja auch nicht nur die SQL-Abfrage ausgeführt, sondern die Daten gleich für die Verwendung in meiner Termin-Klasse entsprechend aufbereitet.
                  Interessantes aus den Themenbereichen Computer, Internet und Programmierung unter
                  http://www.it-blog.net

                  Kommentar


                  • #10
                    Original geschrieben von pascaluhlmann
                    In meiner SQL-Klasse werden ja auch nicht nur die SQL-Abfrage ausgeführt, sondern die Daten gleich für die Verwendung in meiner Termin-Klasse entsprechend aufbereitet.
                    Dann beseitige diesen Konzeptfehler!

                    (Wieso sollte eine SQL-Klasse irgendetwas noch speziell aufbereiten? Die hat die Daten zu holen, und gut is'.)
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Naja, ich würde mal Behaupten, dass die Konzeption meine Entscheidung ist oder?
                      Ich wollte schlichtweg wissen, ob es außer einer Kettenvererbung eine Möglichkeit gibt, auf mehr als eine andere Klasse zuzugreifen. Etwas anderes stand von meiner Seite nie zur Diskussion!
                      Interessantes aus den Themenbereichen Computer, Internet und Programmierung unter
                      http://www.it-blog.net

                      Kommentar


                      • #12
                        Original geschrieben von pascaluhlmann
                        Naja, ich würde mal Behaupten, dass die Konzeption meine Entscheidung ist oder?
                        Natürlich, das ist das schöne an einem freien Land - du hast das Recht, (fast) jeden Unfug zu machen.


                        Genauso ist es aber unser gutes Recht, dich darauf hinzuweisen, wenn das, was du vorhast, objektiv betrachtet suboptimal ist.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Außerdem ist es unser Recht, dass wir dir auf dein Problem, das du hast, Antworten geben und dir sagen, wie du es lösen kannst. Da du dieses Problem garnicht hättest, wenn du diesen Designfehler beseitigen würdest, sagen wir dir das.
                          Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                          var_dump(), print_r(), debug_backtrace und echo.
                          Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                          Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                          Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                          Kommentar


                          • #14
                            Nun, wenn es aber tatsäch der Sinn deiner SQL-Klasse ist, die Daten aufzubereiten, dann pack beides in eine klasse, nenne diese SQL (oder vielleicht doch lieber Termin) und fertig.

                            Kommentar


                            • #15
                              Hi,

                              also zunächst mal stimme ich 100% mit dem gesagten bzgl. des designfehlers
                              überein.
                              Der vollständigkeit halber möchte ich aber noch anmerken, dass man
                              manchmal ein verhalten möchte bei dem man zunächst an mehrfachvererbung denken könnte.
                              Wenn man polymorphy ausnutzen will um z.B. unterschiedlichste klassen
                              mit einem container verwalten möchte und jede dieser klassen aber
                              unter umständen eine spezialisierung einer anderen klasse sein soll.
                              Hier kann man das problem über interfaces lösen. Es ist nicht sonderlich
                              elegant, aber in php der weg den man gehen sollte.

                              greets
                              (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                              Kommentar

                              Lädt...
                              X