Ankündigung

Einklappen
Keine Ankündigung bisher.

ReflectionClass richtig anwenden

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

  • ReflectionClass richtig anwenden

    Hi Leute, ich möchte gern die
    ReflectionClass nutzen um meinen Quellcode zu analysieren. Leider versteh ich nicht, wie man
    ReflectionClass korrekt benutzt. Ich habe ein fertiges Projekt, das z.b. nicht ausgeführt bzw. instanziert werden soll, wenn die
    ReflectionClass benutzt wird. Wie kann man die Klasse
    ReflectionClass einsetzen? Wie werden die Hierachien beachtet, von index.php zu den darin enthaltenen Klassen...?


  • #2
    Möchtest du deinen Quellcode wirklich analysieren oder dokumentieren? Für beides gibt es fertige Werkzeuge wie z.B. phpDocumentor.
    Um so etwas selber zu machen da solltest du schon gute Gründe ins Feld führen.
    PHP-Klassen auf github

    Kommentar


    • #3
      Ich möchte z.B. Eigenschaften aus einer Klasse auslesen und/oder schauen was ich an Klassen habe. Was genau ich damit vorhabe ist nicht Gegenstand meiner Frage. Ich möchte die Reflector-Klasse nutzen ohne eine Instanz der untersuchten Klassen auszulösen , das ist mein Ziel.

      Kommentar


      • #4
        Wie du Eigenschaften ausliest steht auch im Manual. Wenn du den Klassennamen beim Erstellen der ReflectionClass benutzt wird wohl keine Instanz der untersuchten Klasse erstellt.
        PHP-Code:
        class my{
          public 
        $propertty1 1;
          public function 
        __construct(){
            
        var_dump('construct my');
          }
        }
        $rc = new ReflectionClass('my');
        var_dump($rc->getProperties(ReflectionMethod::IS_PUBLIC));

        //Ausgabe
        //array(1) { [0]=> object(ReflectionProperty)#2 (2) { ["name"]=> string(10) "propertty1" ["class"]=> string(2) "my" } } 
        PHP-Klassen auf github

        Kommentar


        • #5
          Die Reflection erstellt keine Instanzen wenn man dies nicht anweist. Aber mal ehrlich das was Du machen willst, sehen welche Properties, Methoden und Konstanten eine Klasse hat kann jede vernünftige IDE von Haus aus. (In PHPStorm heist das Strukturansicht ind Netbeans glaube auch) Wozu sowas Programmieren?
          PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

          Kommentar


          • #6
            Die Neugier kann ich gut verstehen: "Warum macht man etwas das schon da ist?" Ganz einfach, um ein andere Art von Zugang zu bekommen und die Daten intern nutzbar zumachen, statt mit fremden Ergebnissen zu spielen.

            Kommentar


            • #7
              Wie die Eigenschaften einer bekannten Klasse per ReflectionClass ermittelt habe ich gezeigt.
              ReflectionClass reflektiert eine Klasse wie der Name schon sagt.
              Ein belibiges Skript (index.php) welches keine Klasse ist oder gar ein Projekt kannst du mit der ReflectionClass nicht analysieren.
              PHP-Klassen auf github

              Kommentar


              • #8
                Zitat von Ulfikado Beitrag anzeigen
                Wozu sowas Programmieren?
                Autogenerierung einer Dokumentation, siehe Sami https://github.com/FriendsOfPHP/Sami das interessante sind ja nicht die Properties sondern auch die PHPDocs die dabei mit ausgegeben werden
                apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

                Kommentar


                • #9
                  Zitat von BlackScorp Beitrag anzeigen
                  Autogenerierung einer Dokumentation
                  So was in dieser Art? Deshalb meine Frage #2. Selbst dafür ist die ReflectionClass allein nicht ausreichend.

                  PHP-Klassen auf github

                  Kommentar


                  • #10
                    Zitat von jspit Beitrag anzeigen

                    So was in dieser Art? Deshalb meine Frage #2. Selbst dafür ist die ReflectionClass allein nicht ausreichend.
                    mein Antwort bezog sich auf "Wozu sowas Programmieren?" und wieso ist eine ReflectionClass nicht ausreichend?
                    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

                    Kommentar


                    • #11
                      Wie ich schon schrieb liefert ReflectionClass "nur" Informationen über Klassen. Also ein Skript hernehmen und schauen welche Klassen es braucht dafür ist ReflectionClass nicht geeignet.
                      Auch um z.B. um Kommentare in der Umgebung einer Methodendeklaration in einer Klasse einzusammeln ist die Klasse nicht ausreichend.
                      PHP-Klassen auf github

                      Kommentar


                      • #12
                        Zitat von BlackScorp Beitrag anzeigen

                        Autogenerierung einer Dokumentation, siehe Sami https://github.com/FriendsOfPHP/Sami das interessante sind ja nicht die Properties sondern auch die PHPDocs die dabei mit ausgegeben werden
                        Wozu brauche ich bei Sami Reflection? Das ist doch schon alles drin was man braucht. Oder meinst Du das als Beispiel wo Reflektion für den angefragten Zweck genutzt wird?

                        Ich hab nur gefragt weil es halt bereits genügend solche Tools gibt und man das nicht mehr selbst machen muss.
                        PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

                        Kommentar


                        • #13
                          Zitat von Ulfikado Beitrag anzeigen
                          Wozu brauche ich bei Sami Reflection?
                          https://github.com/FriendsOfPHP/Sami...ection.php#L16

                          ist ja keine Magic, die nutzen da ja die Reflection Klasse

                          Zitat von Ulfikado Beitrag anzeigen
                          Ich hab nur gefragt weil es halt bereits genügend solche Tools gibt und man das nicht mehr selbst machen muss.
                          Joa, aber wenn man viel Freizeit hat und Spaß an der Sache? Manchmal mach ich mir gerne die Mühe eine Pizza selber zu machen statt eine Tiefkühlpizza zu nehmen oder in die Pizzaria zu gehen.

                          Alle hier stellen so kurze Rückfragen und Antworten die man total missinterpretieren kann. So als ob ihr das mit absicht macht, damit man weitere Rückfragen stellt, damit weiter Diskussionen auftauchen.

                          Du hast am Anfang erstmal was von IDE gesagt und danach "Wozu braucht man es" dass es noch Externe Tools gibt und man es nicht braucht wegen u.A. Sami hast du zb nicht gesagt.

                          Das Gleiche mit jspit. "Reflection alleine ist nicht ausreichend, hat NUR klassen Informationen", das ist total nichts aussagend und man müsste da wieder mit "Warum?" anfragen.



                          Wie wärs mal mit folgenden Szenario, ich würde zu gerne mein meiner Applikation ein UML erstellen(vielleicht nicht ganz UML aber eine Klassen Hierarchie wie in PHP Storm), einfach nur zu gucken ob nicht eine Klasse zu viele Abhängigkeiten hat etc.
                          PHP Storm hat zwar "Show Class Diagramm" aber wieso zum geier zeigt er mir einfach nur die Ordner an? Wieso muss ich jede einzelne Klasse anklicken. Das wäre zb auch ein nettes Szenario für Reflections UND sowas gibt es nicht.

                          Jetzt ist aber wieder eine Diskussion hier ausgebrochen, auf eine einfache Frage "Wie nutzt man Reflections"

                          Wollte das erwähnen weil es mich gestört habt, bin aber auch heute mit falschen Fuß aufgestanden

                          LG


                          apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

                          Kommentar


                          • #14
                            Zitat von jspit Beitrag anzeigen
                            Wie du Eigenschaften ausliest steht auch im Manual. Wenn du den Klassennamen beim Erstellen der ReflectionClass benutzt wird wohl keine Instanz der untersuchten Klasse erstellt.
                            PHP-Code:
                            class my{
                            public 
                            $propertty1 1;
                            public function 
                            __construct(){
                            var_dump('construct my');
                            }
                            }
                            $rc = new ReflectionClass('my');
                            var_dump($rc->getProperties(ReflectionMethod::IS_PUBLIC));

                            //Ausgabe
                            //array(1) { [0]=> object(ReflectionProperty)#2 (2) { ["name"]=> string(10) "propertty1" ["class"]=> string(2) "my" } } 
                            Kann ich die Klasse. z.b. Deine hier , my auch mit include einbinden? und was ist, wenn diese wieder andere Klassen instanziieren? Oder gibt es eine Möglichkeit mit autoloader Klassen anzuzeigen um sie mit new ReflectionClass('my') anzusprechen?

                            Mal angenommen meine 1. Klasse hieße Main() und darin sind weitere Instanzen. Wie würde das dann aussehen?

                            Kommentar


                            • #15
                              Zitat von CodeDesigner Beitrag anzeigen


                              Mal angenommen meine 1. Klasse hieße Main() und darin sind weitere Instanzen. Wie würde das dann aussehen?
                              Du hast doch eine Tastatur und Finger, nutze diese,,
                              apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

                              Kommentar

                              Lädt...
                              X