Ankündigung

Einklappen
Keine Ankündigung bisher.

Klasse dynamisch mit Funktionen erweitern

Einklappen

Neue Werbung 2019

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

  • #16
    Hallo,

    warum erben denn alle Klassen von der PermissionsFactory? Somit macht du ja alle Klassen zur Factory. Vererbung ist hier der absolut falsche Weg. Eine UserQuery Klasse kann keine PermissionsFactroy sein.

    Dependency Injection wäre hier eher angebracht.

    Die Login Sachen würde ich als Plugin vor der Ausführung generierender Klassen (z.B. MVC Anwendung) einbringen. Genauso auch mit den Rechte Kontrollen. Also quasi ein Auth Plugin und ein ACL (Access Control List) Plugin.

    Gruß Litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    [URL]http://www.lit-web.de[/URL]

    Kommentar


    • #17
      aktuell frage ich mich, was hat die Permission Factory mit modulen zu tun? und wo werden denn nun die Permissions Hergestellt? also in der Factory eher nicht.

      und global $db ist ein nogo.

      ich mach das so mit Modulen

      https://github.com/Opentribes/Core/b...tstrap.php#L19

      diese zeile wird dann noch in eine "modules.php" ausgelagert ,welche später über eine GUI generiert wird.

      in den modulen werden dann dependencies erstellt

      https://github.com/Opentribes/Core/b...Module.php#L68

      wenn ein weiteres Modul registriert wird, so kann man $app[Repository::USER] da seine eigene klasse injezieren.

      https://github.com/Opentribes/Core/b...Module.php#L84
      da wird das repository in den controller injeziert

      jedes modul kann auch routen überschreiben bzw erweitern oder neue hinzufügen , bei den routen einstellungen komen dann die notwendigen rechte

      https://github.com/Opentribes/Core/b...odule.php#L205

      also da wird dann wohl später irgend ein weiteres value wie
      $app->value('requiredRoles',array('User','Admin'))
      stehen. mein hauptmodul macht dann die überprüfung der Rechte

      vielleicht hilft es dir ein wenig weiter
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

      Kommentar


      • #18
        Zitat von litterauspirna Beitrag anzeigen
        warum erben denn alle Klassen von der PermissionsFactory? Somit macht du ja alle Klassen zur Factory. Vererbung ist hier der absolut falsche Weg. Eine UserQuery Klasse kann keine PermissionsFactroy sein.
        Du meinst, weil die anderen Subklassen extenden?
        Ich hab mir das so gedacht:
        Die anderen Klassen wären ja schon "Plugins".
        Ob die jetzt das eigentliche Objekt modifizieren oder was auch immer sie damit anstellen, bleibt dem Pluginersteller überlassen (demjenigen der das Objekt erweitern will oder verändern will)

        In etwa so:

        PHP-Code:
        <?php
        class Mensch {
            static 
        $mensch;
            function 
        __construct() {
                
        // alle Dateien aus dem Unterverzeichnis "/Mensch/" durchschleifen und die enthaltenen Klassen laden
                // so wie ich es vorher probiert hab.
            
        }

            function 
        getMensch(){
                return 
        $this->mensch;
            }
        }

        // Unterklasse Kopf aus einer der hinzugefügten Dateien. Wird durch die "Factory" geladen
        class Kopf {
            function 
        __construct(){
                
        $this->mensch->kopf true;
                
        // Mensch hat Kopf
            
        }
        }
        class 
        Beine {
            function 
        __construct(){
                
        $this->mensch->beine 2;
            }
        }
        // und so weiter
        ?>
        PHP-Code:
        <?php
        // Käme nun jemand auf die Idee, ein Plugin zu machen, das aus dem Menschen eine Spinne macht, könnte das in etwa so aussehen

        class Spinne {
            function 
        __construct(){
                
        $this->mensch->beine 8;
            }
        }
        // heraus käme dann ein Spinnenmensch....
        ?>
        Ich weiss: blödes Beispiel, aber ich möchte mehr das Prinzip einer Factory erfassen.

        Wäre das dann eine Factory?
        Ich meine: die Klasse Mensch
        Das wäre dann doch eine Factory für das Objekt "Mensch".
        Dort würde das Objekt dann zusammengestellt.

        Oder nicht?
        Bin etwas verwirrt.

        Zitat von BlackScorp Beitrag anzeigen
        vielleicht hilft es dir ein wenig weiter
        Danke, ich werds mir auf jeden Fall ansehen.
        Vielleicht könnte ich mir dann das mit dem Plugin-Getue ersparen und ziemlich wahrscheinlich würde es mein Hobby-Level mal auf ein bisschen höheres Niveau bringen Ich meine: wenn ich mich damit auseinandersetze und dann draufkomme, dass ich bis jetzt nur Blödsinn getrieben hab

        Kommentar


        • #19
          https://www.youtube.com/watch?v=KHBrDWIKW8Q

          schau dir mal das video an.. es ist einfach Objekt Orientiert nach dem shema zu denken, dass es immer eine basis klasse gibt und diese wird mit ableitungen erweitert, tatsächlich ist es dass man sich unerwünschte abhängigkeiten durch diese hierarchie erstellt.

          auch das hier
          PHP-Code:
          alle Dateien aus dem Unterverzeichnis "/Mensch/" 
          die verzeichnisstruktur überlässt du am besten dem autoloader (PSR-0 oder PSR-4)
          http://www.php-fig.org/psr/psr-4/

          dann spielt es keine rolle wo sich die dateien befinden und dein plugin kannst du dann über composer nachinstallieren.
          apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

          Kommentar


          • #20
            Eine Frage muss ich hier allerdings auch mal stellen. Warum ist es denn so abwägig einen Event / Hook Dispatcher einzusetzen?

            ICh finde diese Technologie gar nicht so schlecht. Shopware 4 macht dies zum Beispiel auch so und es erleichtert, finde ich zumindest, eine Plugin gestützte Entwicklung doch.

            Gruß Litter
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            [URL]http://www.lit-web.de[/URL]

            Kommentar


            • #21
              Zitat von litterauspirna Beitrag anzeigen
              Eine Frage muss ich hier allerdings auch mal stellen. Warum ist es denn so abwägig einen Event / Hook Dispatcher einzusetzen?
              Das Problem bei events und hooks ist, dass es dir erlaubt, unsauber zu arbeiten, du hast keinen ablaufenden prozess und 3e die mit deiner software arbeiten, wissen bei den Hoocks und Events nicht was da noch im hintergrund alles passiert.

              wenn du aber in einer Bestimmten Reihenfolge deine Abläufe strukturierst , bzw einen Roten Faden durch den gesammten Request setzt. Hast du einen bessere Kontrolle.

              Ich vernwende lieber explizite abhängigkeiten, statt implizite.

              Wenn du ein Hoock eingebaut hast und dann eine seite aufrufst, werden durch den hook unsichtbare dinge ausgeführt. Stell dir vor, jemand baut ein Hook ein, ohne dass du davon was mitkriegst. Dann führst du deine Tests aus und die Schlagen fehl und dann suchst du ewig nach der Ursache
              apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

              Kommentar


              • #22
                Zitat von litterauspirna Beitrag anzeigen
                Eine Frage muss ich hier allerdings auch mal stellen. Warum ist es denn so abwägig einen Event / Hook Dispatcher einzusetzen?
                Es kommt auf den Einsatzzweck an. Ein Event/Dispatcher beschreibt vom Namen her ja schon recht gut, wie der Einsatz auszusehen hat. Du hast in diesem Fall ein Kommunikationsmodell. Sender und Empfänger. Zum Beispiel ein Sender und viele Empfänger. Ein Beispiel hierfür könnte sein, dass gerade ein Produkt gespeichert werden und dieser Umstand an andere Komponenten gemeldet werden soll, damit diese dann noch weitere Aktionen unternehmen. Das kann sein, dass das Produkt dann in der Datenbank gespeichert und zusätzlich noch an einen ElasticSearch-Server übergeben wird, oder dass der Vorgang an einen Logger übermittelt wird.

                Theoretisch kann dieses Modell auch dazu verwendet werden, um etwas im Produkt selbst du verändern, bevor es dann persistiert wird. Dann ist das Modell aber nicht mehr "einfach". Es ist dann nämlich wichtig, in welcher Reihenfolge die Empfänger das Objekt verändern. Man kann beispielsweise kein Threading mehr verwenden, bei dem die einzelnen Empfänger völlig autonom agieren können.

                Kommentar


                • #23
                  +1

                  Kommentar


                  • #24
                    Was hälst du davon, eine Methode zu deklarieren, mit Objektname und Methodenname als Strings und dann über Reflections eine Methode des übergebenen Objektnamens via invoke aufrufst?

                    http://www.php.net/manual/en/reflect...invokeargs.php

                    Ich denke, mit etwas Spielerei sollte das Problem damit leicht zu lösen sein.

                    Kommentar


                    • #25
                      April, april?

                      Kommentar


                      • #26
                        Zitat von dlite Beitrag anzeigen
                        Was hälst du davon, eine Methode zu deklarieren, mit Objektname und Methodenname als Strings und dann über Reflections eine Methode des übergebenen Objektnamens via invoke aufrufst?

                        http://www.php.net/manual/en/reflect...invokeargs.php

                        Ich denke, mit etwas Spielerei sollte das Problem damit leicht zu lösen sein.
                        Ich denke, ich habe das viel zu schnell kommentiert. Die Idee ist eigentlich sehr interessant.

                        Kommentar


                        • #27
                          Closure Bindings sind der Einzige saubere Weg eine Methode einer Existenten Klasseninstanz mit funktionierendem Typehinting beizubringen. Closure Bindings kann PHP seit PHP 5.4. Reflection ist zwar eine Alternative, aber dort hast du definitiv mehr funktions-fremden Overhead.
                          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                          Kommentar


                          • #28
                            Kannst du dazu mal ein Beispiel bringen? (Gerade im Bezug auf Typehinting)

                            Kommentar


                            • #29
                              PHP-Code:
                              class Foo {
                                 public function 
                              a()
                                 {
                                     return 
                              'Hello';
                                 }
                              }

                              $worldMapper = function() {
                                  return 
                              $this->a().' World.';
                              };

                              $bar $worldMapper->bindTo(new Foo'Foo');

                              echo 
                              $bar(); 
                              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                              Kommentar

                              Lädt...
                              X