Ankündigung

Einklappen
Keine Ankündigung bisher.

Verständnisfrage OOP

Einklappen

Neue Werbung 2019

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

  • Verständnisfrage OOP

    Hallo liebe Foristi

    Jetzt folgend ein kurzer Code aus einer Klasse. Danach die Frage(n)...

    PHP-Code:

    class Substr
        
    {
            public 
    $rId '';


            public function 
    __toString()
            {
                return 
    'MyId ist: ' $this->rId;
            }

            public function 
    RequestId()
            {
                
    $rId substr(md5(uniqid(''true)), 0,13);

                return 
    $rId;

            }

            public function 
    getRequestId()
            {    
                return 
    $this->RequestId();
            }
        }

    $Id = new Substr();
    echo 
    $Id->getRequestId(); 
    Meine Frage(n) Kommentare dazu.

    (1) Mit der Methode: "RequestId() erhalte ich durch
    PHP-Code:
    return $rId
    den gewünschten String. Es wird aber nicht die Magic-Methode __toString() aufgerufen.

    (2) Wenn ich mit der Mehtode: "RequestId()" wie folgt vorgehe
    PHP-Code:
    return $this->rId
    erhalte ich folgende Ausgabe

    HTML-Code:
    My Id ist:
    Aber rId ist ein leerer String.

    (3) Wenn ich nun wie folgt ändere
    PHP-Code:
    public $rId '123'
    und sonst nichts ändere (Anpassung in (2) wird belassen) , wird mir ausgegeben:
    HTML-Code:
    123
    Offensichtich habe ich etwas grundlegendes noch nicht verstanden. Ich bitte um Hilfestellung, Aufklärung
    Danke im Voraus. Ja, es ist mir bewusst, dass dies ein "blöde" Anfängerfrage ist, aber wenn man es nicht versteht, soll und darf man doch Fragen.
    LG & ciao....
    thow
    switch $vba()->php()

  • #2
    Die __toString()-Methode ist eine Methode, die Dir erlaubt zu kontrollieren was passiert wenn du Deine Klasse ausgeben willst (oder in einen String umwandeln willst).

    Also:
    PHP-Code:
    $Id = new Substr();
    echo 
    $Id
    Zweitens müsstest du Dir die Variablensichtbarkeit nochmals ansehen. Wenn du eine Klassenvariable definierst und diese benutzen willst musst du die immer mit $this->variable aufrufen.
    In Deiner Methode RequestId() kreierst du eine neue Variable, die zwar gleich heisst, aber nicht denselben Wert beinhaltet.

    Kommentar


    • #3
      Ich glaube, Du willst eher das hier:
      PHP-Code:
      class Substr
          
      {
              public 
      $rId '';

              public function 
      __construct()
              {
                  
      $this->rId substr(md5(uniqid(''true)), 0,13);

              }

              public function 
      __toString()
              {
                  return 
      'MyId ist: ' $this->rId;
              }

              public function 
      getRequestId()
              {    
                  return 
      $this->rId;
              }
          } 
      Und dann:
      PHP-Code:
      $Id = new Substr();
      echo 
      $Id

      Kommentar


      • #4
        Zitat von xm22 Beitrag anzeigen
        Ich glaube, Du willst eher das hier:
        PHP-Code:
           public function __toString()
           {
              return 
        'MyId ist: ' $this->rId;
           } 
        Das ist so immernoch unsauber. _toString sollte ausser Instanzdaten und evtl. nötigen Zuweisungs und/oder Trenner Operatoren nix enthalten. Das 'MyId ist: ' gehört dort nicht rein. Das ist schon viel zu spezifisch!

        Kommentar


        • #5
          Es handelt sich doch hier offensichtlich nur um ein Beispiel bei dem es um etwas anderes geht.

          Kommentar


          • #6
            Das machts doch aber auch nicht richtiger!

            Kommentar


            • #7
              um etwas anderes geht
              Auch, wenn das, was Du ansprichst natürlich korrekt ist, hilft es dem TE ja nicht bei seinem Problem, sondern weitet im Gegenteil den Kontext dieses Threads aus, was vermutlich wenig hilfreich ist.

              Kommentar


              • #8
                Hallo an Alle!

                danke für die Kommentare und Antworten!

                @Messier 1001:
                die Methode __toString() wird verschwinden. Und genau genommen handelt es sich hier schon um "Instanzdaten". Die Variable $rId (die dann RequestId heißen wird) benötige ich in der Bootstrap.php beim erstmaligen "initialisieren"...

                @xm22:
                (a) Richtig, es ist nur ein "Beispiel" und es geht mir - persönlich - darum, zu verstehen, wie Objekte, Methoden (später dann Traits, Factory und was es noch alles gibt (das ich noch gar nicht kenne), ineinandergreifen, um mir mein persönliches "PHP-Ding" zu bauen. Just aus Interesse, Spaß und weil ich auch Zeit habe und sie mir nehme. Auch wenn ich ein älterer Mann bin (der ohne PC aufgewachsen ist) , lerne ich gerne dazu.... Ach ja, das ich natürlcih von Anfang an gewisse Paradigmen und Design Patterns berücksichtige, ist für mich selbst verständlich...

                (b) Eigentlich wollte ich keinen Konstruktor verwenden. Jedoch, ist das vernünftiger.

                Hier die aus meiner Sicht vernünftige Lösung:

                PHP-Code:

                    
                namespace wfsKore\Application\Core;

                    use 
                wfsKore\Application\Utility\GeneralUtility;


                    class 
                Bootstrap
                    
                {
                        
                /**
                         * Uniqe Request Id
                         * 
                         * @var string
                         */
                        
                protected $requestId '';


                        
                /**
                         * sole objective of this MagicMethod ist to test...
                         * 
                         */
                        
                public function __toString()
                        {
                            return 
                'registeredId ist: ' $this->requestId;
                        }

                        
                /**
                         *  Set uniqe requestId
                         */
                        
                public function __construct()
                        {
                            
                $this->requestId substr(md5(uniqid(''true)), 0,13);
                        }

                        public function 
                getRequestId()
                        {    
                            return 
                $this->requestId;
                        }
                    }

                    
                /**
                     * Go on and test....
                     */
                    
                $registeredId = new Bootstrap();
                    echo 
                $registeredId
                Danke nochmals an Alle!
                LG & ciao....
                thow
                switch $vba()->php()

                Kommentar


                • #9
                  Die Benennung ist halt ziemlich unglücklich. Mit "new Bootstrap" würde ich erwarten, dass ein Bootstrap-Objekt erzeugt wird und keine ID.

                  Also eher $bootstrap = new Bootstrap() oder $requestId = new RequestId().

                  Kommentar

                  Lädt...
                  X