Ankündigung

Einklappen
Keine Ankündigung bisher.

Video Diskussion: Wieso man extends vermeiden sollte und was gibt es als alternative?

Einklappen

Neue Werbung 2019

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

  • Video Diskussion: Wieso man extends vermeiden sollte und was gibt es als alternative?

    Guten Morgen,

    heute habe ich ein Video veröffentlich, wo ich aufzeige, wieso man extends nicht einfach so verwenden darf und man stattdessen eher Traits verwenden soll, wenn es nur darum geht copy und paste zu vermeiden.

    https://www.youtube.com/watch?v=TAaHnaU972w

    Diesmal habe ich versucht langsamer zu sprechen, jedoch gab es dann hin und wieder einige Versprecher dir mir erst beim Schneiden aufgefallen sind :/

    Viel Spaß

    PS: für das nächste Video kaufe ich mir eine richtige Beleuchtung damit es besser aussieht
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/witalimik


  • #2
    Ganz gut gemacht, aber mit dem Inhalt gehe ich nicht konform.

    Motto: Nimm kein Hammer sondern besser immer eine Kneifzange.

    Was ich damit sagen will:
    Vererbung und Traits sind Mechnismen der PHP-Programmierung, die beide ihre Berechtigung haben. Richtiger Einsatz der Mechanismen vorausgesetzt.
    PHP-Klassen auf github

    Kommentar


    • #3
      Zitat von jspit Beitrag anzeigen
      Was ich damit sagen will:
      Vererbung und Traits sind Mechnismen der PHP-Programmierung, die beide ihre Berechtigung haben. Richtiger Einsatz der Mechanismen vorausgesetzt.
      Ja, nur halt im Richtigen Einsatz happert es oft, desswegen meinte ich, eher Traits nutzen und dann wenn man wirklich sicher ist, dass man vererbt, da dann extends.

      Habe ja im Video gesagt, ich schreibe meine Klassen mittlerweile alle mit final, damit ich dann später keine bösen Überraschungen kriege. Wenn ich Ableite, dann mache ich mir genaue Gedanken welche Auswirkungen könnte es haben. Bei einem Trait muss ich mir keine Gedanken machen weil ich die einfach ersetzen kann. Es ist einfacher etwas zu erstetzen, was man benutzt und nicht was man als Basis verwendet
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/witalimik

      Kommentar


      • #4
        Mit Traits sollte man aber auch eher sparsam umgehen, denn sie bringen Magie und hierdurch WTF Momente in den Code.
        Gerade wenn man viele Traits verwendet und sich Methoden oder Eigenschaften überschneiden wird dies schnell unübersichtlich.
        https://www.php.net/manual/de/langua...raits.conflict

        Kommentar


        • #5
          Gutes Video! Allerdings stimme ich zu, dass Vererbung ein äußerst mächtiges Werkzeug ist. Traits sind auch mächtig , aber wie Zeichen32 bereits geschrieben hat kann es da schon zu vielen WTF Momenten kommen.

          Auf meiner Arbeit verwenden wir Java und dort haben einige meiner Vorgänger extrem verkackt, eben weil sie keine Vererbung verwendet haben. Dort wird eine Klasse für 100 verschiedene Use Cases verwendet und entsprechend „generisch“ versucht der Code zu sein. Das ist allerdings deutlich nach hinten losgegangen und wäre kein Problem gewesen, wenn man da einfach nur Vererbung verwendet hätte...

          Kommentar


          • #6
            Zitat von Zeichen32 Beitrag anzeigen
            Mit Traits sollte man aber auch eher sparsam umgehen, denn sie bringen Magie und hierdurch WTF Momente in den Code.
            Gerade wenn man viele Traits verwendet und sich Methoden oder Eigenschaften überschneiden wird dies schnell unübersichtlich.
            https://www.php.net/manual/de/langua...raits.conflict
            Guter Einwand, ich hatte halt bisher noch nie ein Fall dass ein Trait viel machen konnte, mehr als eine Methode hatten die bei mir noch nicht, war nicht notwendig.
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/witalimik

            Kommentar


            • #7
              Zitat von Anyone Beitrag anzeigen
              Gutes Video! Allerdings stimme ich zu, dass Vererbung ein äußerst mächtiges Werkzeug ist. Traits sind auch mächtig , aber wie Zeichen32 bereits geschrieben hat kann es da schon zu vielen WTF Momenten kommen.

              Auf meiner Arbeit verwenden wir Java und dort haben einige meiner Vorgänger extrem verkackt, eben weil sie keine Vererbung verwendet haben. Dort wird eine Klasse für 100 verschiedene Use Cases verwendet und entsprechend „generisch“ versucht der Code zu sein. Das ist allerdings deutlich nach hinten losgegangen und wäre kein Problem gewesen, wenn man da einfach nur Vererbung verwendet hätte...
              In java habt ihr da sogar Private Klassen und Public Classen, das fehlt uns in PHP. Aber ja "Generisch" sein ist auch ein Punkt dass ich erwähnen sollte.. weil die Generik führt dann wiederum schnell zum Godobject.

              Ich verbuche das mal unter "Unser Gehirn denkt zu kompliziert und mag es auch so"
              apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/witalimik

              Kommentar


              • #8
                Schade dass die Diskussion nicht auf Youtube stattfindet wäre auf jeden Fall hilfreich für den Youtube Algorithmus
                apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/witalimik

                Kommentar


                • #9
                  Traits und Vererbung verfolgen doch zwei vollkommen unterschiedliche Ziele, die kann man nicht beliebig ersetzen.
                  Mir wäre jedenfalls nicht bekannt, dass man mittels Traits Interfaces abbilden / definieren könnte, alleine deshalb ziehe ich saubere Klassen vor - ohne "WTF?".
                  Ein Blick in die Abstract / das Interface und alles ist klar, das überwacht sogar die IDE für mich
                  ​​​​Ein Trait kommt eher in Frage, wenn Methoden extrem generisch (summiere a und b) sind oder in mehreren - aber eben nicht allen - Implementierungen eines Interfaces eingesetzt werden.
                  actra.development - Zend Certified Engineer for PHP5 - actra-oss @ github

                  Kommentar


                  • #10
                    Zitat von G.Schuster Beitrag anzeigen
                    Traits und Vererbung verfolgen doch zwei vollkommen unterschiedliche Ziele, die kann man nicht beliebig ersetzen.
                    Mir wäre jedenfalls nicht bekannt, dass man mittels Traits Interfaces abbilden / definieren könnte, alleine deshalb ziehe ich saubere Klassen vor - ohne "WTF?".
                    Ein Blick in die Abstract / das Interface und alles ist klar, das überwacht sogar die IDE für mich
                    ​​​​Ein Trait kommt eher in Frage, wenn Methoden extrem generisch (summiere a und b) sind oder in mehreren - aber eben nicht allen - Implementierungen eines Interfaces eingesetzt werden.
                    Das setzt aber voraus, dass man Vererbung auch verstanden hat, ich beziehe mich im Video auch nicht auf interfaces sondern nur auf das "extends". Das Video soll dazu dienen um zu Zeigen dass man extends nicht einfach so verwenden kann/soll und für die 0815 Fälle reicht ein Trait aus.


                    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/witalimik

                    Kommentar


                    • #11
                      Zitat von BlackScorp Beitrag anzeigen
                      Das setzt aber voraus, dass man Vererbung auch verstanden hat, ich beziehe mich im Video auch nicht auf interfaces sondern nur auf das "extends". Das Video soll dazu dienen um zu Zeigen dass man extends nicht einfach so verwenden kann/soll und für die 0815 Fälle reicht ein Trait aus.
                      Das liest sich für mich jetzt aber ein wenig so: "Wer das komplexe Thema Vererbung noch nicht verstanden hat, sollte auf extends verzichten und auf Traits setzen."?
                      Macht es dann nicht mehr Sinn, demjenigen nahezulegen, Vererbung zu lernen, um es richtig einzusetzen?!
                      Competence-Center -> Enjoy the Informatrix
                      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                      Kommentar


                      • #12
                        Zitat von Arne Drews Beitrag anzeigen
                        Das liest sich für mich jetzt aber ein wenig so: "Wer das komplexe Thema Vererbung noch nicht verstanden hat, sollte auf extends verzichten und auf Traits setzen."?
                        Macht es dann nicht mehr Sinn, demjenigen nahezulegen, Vererbung zu lernen, um es richtig einzusetzen?!
                        jain. Ja man hat das Thema Vererbung noch nicht Verstanden, aber ich wollte auch sagen dass man nicht unbedingt extends braucht nur um Methoden zu vererben. Wenn man extends einsetzt NUR damit man per parent::doSomething auf eine methode zugreift, dann ist man mit einem Trait besser dran
                        apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/witalimik

                        Kommentar


                        • #13
                          Um mich auch nochmal einzumischen,
                          traits zu nutzen um Vererbung zu umgehen, halte ich wie die meisten hier für suboptimal.
                          Ein genaues Fassen der "Realität", welche es abzubilden gilt, ist allerdings auch notwendig.

                          In Deinem Beispiel erklärst Du der Vogel kann fliegen, was keine Eigenschaft eines Vogels ist, genauso wenig wie das Würmer essen

                          Der Vogel hat Federn, Flügel und ist der letzte Nachfahre des Dinosauriers.

                          Ernährung, kann mit Ass, Würmen, Fischen und kleineren Wirbeltieren erfolgen soweit ich weiss.

                          Das Enähren mit Fischen beispielsweise kann ein ein Mensch, ein Vogel, Ein Eisbär und da es Tranlampen mal gab sichert auch irgendwie ein Motor.


                          Kommentar


                          • #14
                            Zitat von tomBuilder Beitrag anzeigen
                            Um mich auch nochmal einzumischen,
                            traits zu nutzen um Vererbung zu umgehen, halte ich wie die meisten hier für suboptimal.
                            ich versuche hier nicht Vererbung umzugehen sondern die leute dazu animieren, Traits zu nutzen statt extends nur um methoden innerhalb der Klasse zur Verfügung zu stellen. Es ging doch darum dass extends Falsch eingesetzt wird, ich versuche doch garnicht die Vererbung an sich zu umgehen, ich nutze sehr wohl interfaces zum Beispiel. Und auch abstrakte Klassen etc. Es ging wirklich nur darum zu sagen, "Hört auf extends zu nutzen wenn es nicht notwendig ist und nutzt im Zweifel dann Traits"

                            Zitat von tomBuilder Beitrag anzeigen
                            Ein genaues Fassen der "Realität", welche es abzubilden gilt, ist allerdings auch notwendig.

                            In Deinem Beispiel erklärst Du der Vogel kann fliegen, was keine Eigenschaft eines Vogels ist, genauso wenig wie das Würmer essen
                            Habe ich auch nicht gesagt, eine Klasse hat Eigenschaften UND Methoden, und fliegen ist eine Methode/Aktion der Klasse

                            Zitat von tomBuilder Beitrag anzeigen

                            Das Enähren mit Fischen beispielsweise kann ein ein Mensch, ein Vogel, Ein Eisbär und da es Tranlampen mal gab sichert auch irgendwie ein Motor.
                            Genau darauf wollte ich hinaus. Statt der Ableitung nutzt du eben Traits damit die die gleiche Methode, an Klassen zuweisen kannst. Du kannst halt kein Mensch von einem Vogel etc ableiten aber du kannst die "Fähigkeit" fliegen in ein Trait umwandeln. Danach kannst du abbilden was auch immer du willst mit Interfaces und Traits. Im Grunde ist es das gleiche wie ein Component Entity system. Du hast Komponnenten in traits definiert und zu den Komponenten hast du dann interfaces. Du kannst dann einge Beliebige Entity zusammenbauen, mit den Interfaces definierst du welche Fähigkeiten das ENtity haben soll und die Traits haben dann die konkreten Methoden.


                            Ich finds faszinieren, was jeder hier interpretiert hat, das sagt mir dass ich echt schlecht bin, darin meine "Message" deutlich zu zeigen. Werde dran arbeiten. Eure Antworten haben mir echt weitergeholfen
                            apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/witalimik

                            Kommentar


                            • #15
                              Zitat von BlackScorp Beitrag anzeigen
                              Ich finds faszinieren, was jeder hier interpretiert hat, das sagt mir dass ich echt schlecht bin, darin meine "Message" deutlich zu zeigen. Werde dran arbeiten. Eure Antworten haben mir echt weitergeholfen
                              Das kenne ich

                              Also fange ich nochmal neu an.

                              Titel, wann man extends vermeiden sollte ?



                              Zitat von BlackScorp Beitrag anzeigen

                              Habe ich auch nicht gesagt, eine Klasse hat Eigenschaften UND Methoden, und fliegen ist eine Methode/Aktion der Klasse
                              nein!

                              Ich habe gesagt, fliegen (können) ist keine eigenschaft eines vogels - eines lebewesens.
                              wieso soll eine abbildende Klasse methoden haben, welche in der abzubildenden welt nicht zwingend zu dem abgebildeten Object gehören ?

                              genauso grenzwertig halte ich es fliegen als trait zu nutzen, für vögel, insekten und fledermäuse (und fische ?).


                              deswegen habe ich das mit der nahrung ins spiel gebracht ^^

                              es geht dir in den videos ja nicht darum zu zeigen, was du kannst sondern anfängern hilfestellung zu geben.

                              in bezug darauf halte ich die so getroffenen aussagen von dir - nicht was man möglichereise falsch verstehen könnte - stellenweise für sehr ungeeignet,
                              wie ich bspw. am alternativen titel oben angedeutet habe.

                              Kommentar

                              Lädt...
                              X