Ankündigung

Einklappen
Keine Ankündigung bisher.

Interface ohne Klassen Instanz abfragen

Einklappen

Neue Werbung 2019

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

  • Interface ohne Klassen Instanz abfragen

    Hallo,

    ich suche eine Lösung für folgendes Problem.
    Eine Klasse implementiert ein Interface, jedoch wird diese Klasse nicht sofort instanziiert sondern soll zuvor auf ein Interface geprüft werden.
    hauptsächlich wird die Klasse über statische Methoden instanziiert.

    funktioniert nicht, da es vermutlich erst eine Instanz sein muss.
    Code:
    if($eloquent instanceof IFilesystem) { ... }
    gibt es da eine Möglichkeit ohne die array der Methode class_implements
    abzugehen?

    Danke!


  • #2
    Ohne Refactoring (class_implements) geht es leider nur mit Instanzen, nicht mit Klassen.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      PHP-Code:
      if($eloquent instanceof IFilesystem) { ... } 
      das klingt aber feur mich als ob du eloquent models als dateien abspeichern willst..

      Repositories wuerden dir da weiterhlefen

      http://culttt.com/2013/07/08/creatin...-repositories/
      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/c/VitalijMik

      Kommentar


      • #4
        [man]is_a[/man] oder [man]reflectionclass[/man] nutzen. Ich schließe mich dennoch BlackScorp an.
        [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


        • #5
          @BlackScorp
          Nein, das habe ich nicht vor ,
          Ich hatte vor eine Helfer Klasse zu schreiben die verschiedenste Dateien kopiert, verschiebt usw. jedoch benötigt diese Klasse Zugriff auf eine Datenbank Tabelle und das wollte ich mittels Eloquent lösen.
          Das Eloquent Model wird an die Helfer klasse übergeben und in dem Interface sind dann klar definierte Methoden und Konstanten die von der Helfer Klasse benötigt werden.

          Kommentar


          • #6
            hauptsächlich wird die Klasse über statische Methoden instanziiert.
            Selbst schuld.
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              @nikosch
              Dafür kann ich nichts, das ist das Framework schuld
              aber danke für die Antworten ich schau mal ob ich eine Lösung finde.

              Kommentar


              • #8
                ReflectionClass schon mal angeschaut?
                Standards - Best Practices - AwesomePHP - Guideline für WebApps

                Kommentar


                • #9
                  Mit ReflectionClass wars doch ganz schön einfach.
                  Hab's wieder einmal komplizierter gemacht wie es doch ist.

                  Danke für den Tipp, auch an die anderen die den selben hatten,
                  hab nicht ordentlich gelesen.

                  ReflectionClass::implementsInterface funktioniert super.

                  Kommentar


                  • #10
                    Wenn du sowas im Produktivbetrieb nutzen musst ist zu 99%iger Sicherheit ein Designfehler in der Software...
                    Zitat von nikosch
                    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                    Kommentar


                    • #11
                      @tkausl
                      Ich verwende das Laravel4 Framework, da werden viele Klassen Methoden Statisch angesprochen,
                      oder bezieht sich das jetzt auf mein Vorhaben mittels ReflectionClass::implementsInterface?

                      Kommentar


                      • #12
                        Warum genau brauchst du das denn?
                        Standards - Best Practices - AwesomePHP - Guideline für WebApps

                        Kommentar


                        • #13
                          Zitat von Niru Beitrag anzeigen
                          Ich verwende das Laravel4 Framework, da werden viele Klassen Methoden Statisch angesprochen,
                          aber doch nur die außen api damit man es leichter verwenden kann, intern wird da mit instanzen gearbeitet
                          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/c/VitalijMik

                          Kommentar


                          • #14
                            Laravel4 hat für fast alles was intern abläuft eine (statische) Facade. Wie schon gesagt wurde, wird da intern sehr wohl ein Objekt erzeugt. Gibt ein eigenes Kapitel in der Doku dazu: http://laravel.com/docs/facades

                            Kommentar


                            • #15
                              Ja, allerdings funktioniert dort die Datenbank nach dem ORM Konzept und die Modelle erben praktisch von der Klasse Eloquent und bilden damit die Datenbank ab, und die geerbte Eloquent Klasse nutzt dann zu beginn immer eine Statische Methode um sich zu instanziieren
                              Eloquent::where(...)

                              Ich denke die Klasse sieht auch vor das man sie ohne Statische Methode deklarieren kann, allerdings wäre es doch unnötig sie zu Instanziieren und erst danach zu fragen ob sie nun das gewünschte Interface implementiert hat oder nicht.
                              Oder sehe ich das falsch?

                              Kommentar

                              Lädt...
                              X