Ankündigung

Einklappen
Keine Ankündigung bisher.

Dynamisch Methoden von Klassen erweitern

Einklappen

Neue Werbung 2019

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

  • Dynamisch Methoden von Klassen erweitern

    Hallo,

    ich bin mir sicher das Thema wurde bestimmt schon mal irgendwo ausfühlich erklärt, jedoch finde ich hierzu nichts passendes oder ich habe es bis jetzt einfach noch nicht ganz verstanden.

    Als Lernzweck habe ich mich an eine CMS rangesetzt die Modular funktionieren soll mit dem Ziel, dass ich theoretisch jede einzelne Stelle beliebig erweitern kann.
    Nun komme ich langsam an meine Grenzen. Ich weiß nicht ob es einfach nur eine Denkblockade ist oder ich noch nicht den richtigen Ansatz gefunden habe.

    Hier ein kleines Beispiel, wie es am Ende funktionieren sollte:
    Ich habe eine CMS mit einem Menü und Content, jedoch keine Benutzer etc., alles also ganz simpel.
    Nun erstellt eine Person (Person A) eine Erweiterung für die CMS. Er möchte Benutzer, Benutzergruppen und Rechte einfügen. Natürlich auch, dass manche Menüpunkte nur dann sichtbar sind, wenn man die passenden Rechte dafür hat. Also erweitert er die Menu Klasse, indem er z.B. bei $menu->isVisible eine weitere Abfrage einfügt ob man die passenden Rechte hat.
    Jetzt aber hat eine noch weitere Person (Person B) ebenfalls eine Erweiterung für die CMS geschrieben. Er möchte eine Sortierung für das Menü einbauen. Also erweitert er die Menu Klasse, indem er vor die $menu->display Methode eine Sortiermethode einbaut.

    Nun komme ich jedoch zur Denkblockade.
    Theoretisch müsste Person A die Klasse Menu extenden. Person B müsste praktisch die Klasse von Person B extenden. Jedoch weiß Person B gar nicht das es eine andere Erweiterung gibt.
    Und soweit ich weiß, kann man bei extend keine Variable am Ende ranhängen.

    Hintergedanke dazu:
    Was ist wenn Person A und Person B die selbe Methode erweitern wollen? Ist es möglich, dass beides, je nachdem wie es programmiert wurde, funktionieren und sich nicht blockieren?

    Würde mich über eure Gedanken sehr freuen

  • #2
    Zitat von Mr.Tr33 Beitrag anzeigen
    Was ist wenn Person A und Person B die selbe Methode erweitern wollen? Ist es möglich, dass beides, je nachdem wie es programmiert wurde, funktionieren und sich nicht blockieren?
    Nein. Klassen erweitern und ein modularer Aufbau widersprechen sich aus genau diesem Grund.

    Kommentar


    • #3
      Ja gut, aber wie machen das große und "gute" CMS?
      Ich habe mich da jetzt nicht groß eingelesen, da es vermutlich länger dauern würde sich einzulesen als ein Beispiel, welches Vermutlich bereits irgendwo existiert nur ich das Schlagwort dafür nicht kenne, zu nennen.

      Kommentar


      • #4
        Das meist verbreiteste wird wohl Event-basierte Programmierung sein.
        [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

        Kommentar


        • #5
          Zuvor wäre eine SoC-Architektur mit DI anzustreben. Damit könnte man zumindest den beschriebenen Fall abdecken, indem man die Ursprungsklassen wrapped. Wie so oft würde ich auch hier wieder PHP-DI empfehlen.

          Kommentar


          • #6
            Vielleicht hilft dir das hier weiter:
            Entwurfsmuster
            Prinzipien objektorientierten Designs

            Kommentar

            Lädt...
            X