foomaker: Zugriff auf Instanznamen innerhalb einer Instanz?

Tach zusammen,

gegeben ist:

  
class a  
{  
  private $instanzname;  
  public function __construct()  
  {  
    $this->instanzname=NAME_DER_INSTANZ;  
  }  
}  
  
$objektXY=new a();  

Ich möchte beim Instantiieren den Namen der Instanz (hier: 'objektXY') in $objektXY->instanzname speichern.

a geht das überhaupt?
b wenn a, geht das im Konstruktor?
c wenn b, was muss statt 'NAME_DER_INSTANZ' im Konstruktor stehen?
d wenn nicht b, geht das ggf. nach dem Instantiieren per Methode?
e wenn d, was muss statt 'NAME_DER_INSTANZ' in der entsprechenden Methode stehen?

Freu mich auf Eure Tipps.

Gruß vom foomaker

--
Natürlich glaube ich an die Existenz von Ausserirdischen. Schliesslich gibt es ja auch das PERFEKTE SCRIPT.
  1. Tach zusammen,

    gegeben ist:

    class a
    {
      private $instanzname;
      public function __construct()
      {
        $this->instanzname=NAME_DER_INSTANZ;
      }
    }

    $objektXY=new a();

    
    >   
    > Ich möchte beim Instantiieren den Namen der Instanz (hier: 'objektXY') in $objektXY->instanzname speichern.  
    >   
      
    $objektXY ist nicht der Name der Instanz.
    
    1. Hallo Muld,

      $objektXY ist nicht der Name der Instanz.

      ok. Verzeih meine unpräzise Ausdrucksweise.
      Was mein Problem ist, ist aber doch wohl deutlich, oder?

      Wie auch immer 'objektXY' von $objektXY heisst - ich nenne es mangels Wissen einfach mal 'Name der Instanz' - möchte ich im Konstruktor ermitteln. Fragen siehe OP.

      Aber Danke für den Hinweis.

      Gruß vom foomaker

      --
      Natürlich glaube ich an die Existenz von Ausserirdischen. Schliesslich gibt es ja auch das PERFEKTE SCRIPT.
      1. $objektXY ist ja in erster Linie mal eine Variable. Du versuchst also, den Namen der Variable zu finden.

        1. ...Du versuchst also, den Namen der Variable zu finden.

          Nein. Ich weiss ja, wie die Variable heisst. :-)
          Ich möchte auf ihn zugreifen und in einer weiteren Variablen speichern.

          Gruß vom foomaker

          --
          Natürlich glaube ich an die Existenz von Ausserirdischen. Schliesslich gibt es ja auch das PERFEKTE SCRIPT.
          1. »» ...Du versuchst also, den Namen der Variable zu finden.

            Nein. Ich weiss ja, wie die Variable heisst. :-)
            Ich möchte auf ihn zugreifen und in einer weiteren Variablen speichern.

            Gruß vom foomaker

            Doch. DU weisst, wie die Variable heisst, aber niemand sonst.

      2. Lieber foomaker,

        Du willst also wissen, wie der Variablenname lautet, unter dem die zugehörige Instanz initiiert wurde? Wozu? Ich kann doch dieselbe Instanz einer weiteren Variable zuordnen, und schon "weiß" die Instanz nicht mehr, unter welchem Variablennamen sie gerade gehandelt wird!

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Lieber Felix,

          Du willst also wissen, wie der Variablenname lautet, unter dem die zugehörige Instanz initiiert wurde?

          Jap.

          Wozu?

          Eigentlich wollte ich vermeiden, den genauen Sinn und Zweck preiszugeben, weil möglicherweise dadurch eine Diskussion über Sinn und Unsinn meines Vorgehens entfacht wird. Sei's drum.

          Eine Klasse 'erstellt' (ja, ich weiss, das sagt man so nicht, deshalb die '') HTML-Elemente. Das Attribut 'id' soll den Wert des Instanzvariablennamens haben, ohne dass ich diesen explizit als Parameter übergeben muss. Also $instanzXY = new element(); und nicht $instanzXY = new element('instanzXY');

          Ich kann doch dieselbe Instanz einer weiteren Variable zuordnen, und schon "weiß" die Instanz nicht mehr, unter welchem Variablennamen sie gerade gehandelt wird!

          was in meinem geschilderten Beispiel pupsegal ist, weil die id des Elements dann einfach bleibt wie sie nach Instantiierung ist.

          Gruß vom foomaker

          --
          Natürlich glaube ich an die Existenz von Ausserirdischen. Schliesslich gibt es ja auch das PERFEKTE SCRIPT.
          1. das sollte dir weiterhelfen

            $objektXY=new a();
            var_dump(get_defined_vars());

            1. Hallo muld,

              das sollte dir weiterhelfen

              $objektXY=new a();
              var_dump(get_defined_vars());

              in der Tat. :-)

              so geht's:

                
              $test='abc';  
              $arr=get_defined_vars(); // liefert alle definierten Variablen  
              end($arr); // setzt cursor ans Ende  
              $last = each($arr); // liefert Schlüssel UND Wert  
              echo $last['key']; // Ausgabe des Variablennamens  
              
              

              Ein bisschen umständlich, aber wirkt. ;-)

              Danke für den Tipp.

              Gruß vom foomaker

              --
              Natürlich glaube ich an die Existenz von Ausserirdischen. Schliesslich gibt es ja auch das PERFEKTE SCRIPT.
          2. echo $begrüßung;

            Eigentlich wollte ich vermeiden, den genauen Sinn und Zweck preiszugeben, weil möglicherweise dadurch eine Diskussion über Sinn und Unsinn meines Vorgehens entfacht wird. Sei's drum.

            Hast du Angst, dass dir diese windige Idee ausgeredet wird? Du scheinst selbst nicht gerade von ihr überzeugt zu sein, wenn du sie nicht offenbaren wolltest.

            Eine Klasse 'erstellt' (ja, ich weiss, das sagt man so nicht, deshalb die '') HTML-Elemente. Das Attribut 'id' soll den Wert des Instanzvariablennamens haben, ohne dass ich diesen explizit als Parameter übergeben muss. Also $instanzXY = new element(); und nicht $instanzXY = new element('instanzXY');

            Und der nächste Anwender möchte das Objekt in einem Array-Feld oder einer Eigenschaft eines anderen Objekts ablegen. Was dann?

            Mit einer Schleife sollen mehrere HTML-Elemente erstellt werden. Willst du dann mit variablen Variablen hantieren?

            Auch die Lösung mit dem nachträglichen Ermitteln ist äußerst ungünstig. Du müsstest im aktuellen Kontext sämtliche Variablen mit dem eben erstellten Objekt vergleichen, um die passende zu finden. Und dies ist jedes Mal deutlich aufwendiger, als wenn du die ID gleich als String übergibst.

            echo "$verabschiedung $name";

  2. echo $begrüßung;

    $objektXY=new a();
    Ich möchte beim Instantiieren den Namen der Instanz (hier: 'objektXY') in $objektXY->instanzname speichern.
    a geht das überhaupt?

    Eine Instanz hat, wie schon zurecht bemerkt keinen Namen. Das gilt übrigens für sämtliche Werte.

    b wenn a, geht das im Konstruktor?

    Erst nach der Abarbeitung des Konstruktors erfolgt die Zuweisung zu der Variablen. Jedenfalls ist das in deinem Fall so. Vermutlich wird die Variable auch erst bei der Zuweisung angelegt. Ihr Name kann daher auch nicht vorher ermittelt werden.

    echo "$verabschiedung $name";

    1. Hallo dedlfix,

      jap, das ist der Punkt. Es geht nicht. :-(

      Gruß vom foomaker

      --
      Natürlich glaube ich an die Existenz von Ausserirdischen. Schliesslich gibt es ja auch das PERFEKTE SCRIPT.