Ankündigung

Einklappen
Keine Ankündigung bisher.

Objektorientierung -> Name des Objektes zurückgeben

Einklappen

Neue Werbung 2019

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

  • Objektorientierung -> Name des Objektes zurückgeben

    Hallo,
    ich bin gerade dabei mich mit PHP und Objektorientierung zu beschäftigen.
    Ich habe jetzt etlich Bücher gewälzt, Foren durchforstet etc. Konnte aber keine Antwort auf meine Frage finden.

    Ist es möglich (über eine Methode oder sonstiges in der Klassendefinition) den Name eines erzeugten Objektes zurückzugeben?
    Über get_class ist es immerhin möglich die zugehörige Klasse zurückzugeben.

    Bin für jede Hilfe dankbar.

    Viele Grüße aus Dortmund


  • #2
    Ein Objekt hat keinen Namen.

    Kommentar


    • #3
      Ein Objekt erzeuge ich doch mit z.b. bello = new Hund();
      somit wäre doch bello der name des Objektes?
      Ich suche eine Möglichkeit, mit einer ausgabe Methode diesen Namen auszugeben bzw. diesen Namen in einer Variablen und/oder Array zu speichern.

      Kommentar


      • #4
        Nein, bello ist dann der Name der Variable.
        Wofür soll das gut sein, den Namen einer Variable in einer Variablen zu speichern?
        Es steht dir natürlich frei, eigene getter / setter Methoden / Property dafür zu machen.

        Viele Grüße aus Gladbach
        Eine Mannschaft aus Granit! So wie einst Real Madrid!
        Und so zogen wir in die Bundesliga ein und wir werden wieder Deutscher Meister sein!

        Kommentar


        • #5
          Lies mal https://forum.selfhtml.org/self/2020...75623#m1775623, vielleicht ist dein eigentliches Problem ähnlich gelagert?

          Kommentar


          • #6
            Meister1900 So ganz erschließt sich das mir nicht. In der Theorie definiere ich meine Klasse. Von dieser Klasse erzeuge ich dann mit dem new Operator meine Objekte.
            Aber ich möchte mich jetzt nicht darüber streiten ob wir hier von Objektvariablen oder Objekten reden.
            Die Grundfrage ist immer noch, gibt es eine Möglichkeit eine Methode innerhalb der Klassendefinition zu schreiben, die mir beim Aufruf den jeweiligen Namen des Objektes bzw. der Variablen zurückzugeben?
            Ich könnte ja theoretisch zumindest unendlich viele Hunde generireren mit beliebig vielen Attributen. Ich wollte erreichen, dass jeweils der Objekt/Variablenname vor den jeweiligen Werten ausgegeben wird.

            Natürlich könnte man auch eine Variable für den Namen anlegen. Mag sein, dass es nicht elegant ist, dass so zu schreiben. Aber die Frage ist immer noch: Geht das? Und wenn ja, wie?

            tk1234 da steige ich leider nicht ganz durch

            Kommentar


            • #7
              Von Stackoverflow:

              PHP-Code:
              <?php
              class Foo {
                  public function 
              getAssignedVariable() {

                      
              $hash = function($object) {
                          return 
              spl_object_hash($object);
                      };

                      
              $self $hash($this);

                      foreach (
              $GLOBALS as $key => $value) {
                          if (
              $value instanceof Foo && $self == $hash($value)) {
                              return 
              $key;
                          }
                      }
                  }
              }

              $a = new Foo;
              $b = new Foo;

              echo 
              '$' $a->getAssignedVariable(), PHP_EOL;  // $a
              echo '$' $b->getAssignedVariable(), PHP_EOL;  // $b
              Aber bevor ich so einen Kokolores machen würde, würde ich den Namen einfach im Constructor übergeben, in einem Attribut speichern und dann eine öffentliche Getter-Methode schreiben, die den Namen zurück gibt.
              Eine Mannschaft aus Granit! So wie einst Real Madrid!
              Und so zogen wir in die Bundesliga ein und wir werden wieder Deutscher Meister sein!

              Kommentar


              • #8
                der name der Variablen oder Objectvariable ist nur für den Programierer Interessant,

                Der Hund allerdings sollte zumindest in der wirkliche welt einen rufnamen haben.

                PHP-Code:
                class Dog {

                    public  function 
                _construct ($name){
                          
                this->name $name

                  
                }

                }


                $sdfrwesvdcs = new Dog("bello");
                $sdfgdvmmm  = new Dog("Wuffi"); 
                daran kannst Du sehen, auch wenn sdfgdvmmm ein wirklich super mieser variablen name ist, wichtig hier ist Wuffi

                Kommentar


                • #9
                  Mit

                  PHP-Code:
                  class hund{}

                  $bello = new hund;
                  $wuffi = new hund
                  werden Objekte vom Typ hund erzeugt und ein Bezug zum Objekt in den Variablen $bello und $wuffi gespeichert.
                  Ein
                  PHP-Code:
                  $bello2 $bello
                  erzeugt weder eine Kopie des Objektes noch ein neues Objekt. $bello2 enthält den selben Bezug wie $bello.
                  Egal ob du nun $bello2 oder $bello benutzt, deine Aktionen betreffen das selbe Objekt.

                  Wie von tomBuilder gezeigt kannst du über den Konstruktor dem Objekt Daten übergeben, welche das Objekt identifizieren können.

                  Um festzustellen, ob in zwei Variablen die selben Objektbezüge stehen oder unterschiedliche kann die Funktion spl_object_id() benutzt werden.

                  PHP-Code:
                  var_dump(
                    
                  spl_object_id($bello),
                    
                  spl_object_id($bello2),
                    
                  spl_object_id($wuffi)
                  ); 
                  Die Ausgabe
                  int(1) int(1) int(2)

                  zeigt das $bello und $bello2 dieselbe Id haben und $wuffi eine andere. Ein var_dump($bello); zeigt dir
                  object(hund)#1 (0) { }

                  Hinter dem # findest du die id.

                  Meister1900 : Kokolores ist die richtige Bezeichnung für so etwas. Keine Lösung, da unter bestimmten Bedingungen fehlerhaft.
                  PHP-Klassen auf github

                  Kommentar


                  • #10
                    Objekte können in Arrays (beliebig tief) abgelegt werden
                    PHP-Code:
                    $arr[0]['foo'][42]['bar'] = new hund(); 
                    Objekte können auch ohne Variablenzuweisung (anonym) erschaffen & herumgereicht werden.
                    PHP-Code:
                    call_user_function('kraule_den_hund', new hund()); 
                    In der Funktion wird eine lokale Variable dafür verwendet, aber das hund-Objekt überlebt die Variable in der Regel.
                    Wird der hund durch mehrere Funktionen gereicht, kann jeder lokale Variablenname unterschiedlich sein.

                    Lustigerweise ist es mit Funktionen genauso.
                    Namen - egal ob Variablen oder Funktionsnamen - entstehen durch eine Symboltabelle, in der ein Bezeichner (Symbol) und eine Speicheradresse vermerkt sind. Interessant ist das nur für den Compiler oder Parser, der einen (Hochsprachen) Quelltext in einen Maschinencode umwandeln muss... da unten gibts dann keine Namen mehr, nur noch Speicheradressen. Namen sind also nur ein Hilfsmittel, damit Menschen sich nicht mit Speicheradressen herumplagen müssen.
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar

                    Lädt...
                    X