foomaker: OOP Objektnamen im Objekt ablegen?

Tach zusammen.

  
class a  
{  
  private $name;  
  public function __construct()  
  {  
    $this->name=???  
  }  
}  
  
$myobj=new a; //Instanziierung  

Kann ich - wenn ja, wie? - bereits bei der Instanziierung auf den Namen der Variablen zugreifen, in der das Objekt abgelegt wird um es im Konstruktor direkt in $name abzulegen, also $this->name='myobj'?

Ich vermute bereits, dass das totaler Quatsch ist, weil ZUERST das Objekt erzeugt und DANN abgelegt wird, weshalb der Konstruktur des Objektes den Namen des Objekts ('myobj') noch nicht kennen kann.

Liege ich da richtig oder gibt es tatsächlich eine Lösung für mein "Problemchen"?

fragt der foomaker

--
Natürlich glaube ich an die Existenz von Ausserirdischen. Schliesslich gibt es ja auch das PERFEKTE SCRIPT.
  1. [latex]Mae  govannen![/latex]

    Liege ich da richtig oder gibt es tatsächlich eine Lösung für mein "Problemchen"?

    Ob das überhaupt vorgesehen ist, weiß ich nicht.
    Du kannst natürlich einen Umweg gehen:

    class a  
    {  
      private $name;  
      public function __construct($oname)  
      {  
        $this->name=$oname;  
      }  
    }  
      
    $myobj=new a('myobj'); //Instanziierung
    

    Cü,

    Kai

    --
    Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
    selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
    1. Hi Kai

      $myobj=new a('myobj');

      das habe ich mir auch schon überlegt. Nicht schön, aber wohl unvermeidlich.

      Oder hat noch einer eine andere Idee?

      grübelt der foomaker

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

    Ich vermute bereits, dass das totaler Quatsch ist, weil ZUERST das Objekt erzeugt und DANN abgelegt wird, weshalb der Konstruktur des Objektes den Namen des Objekts ('myobj') noch nicht kennen kann.

    ich vermute eher, dass das totaler Quatsch ist, weil niemand den Entwickler zwingt, ein erzeugtes Objekt in exakt einer Variablen abzulegen - es können beliebig viele andere sein, auch null. Der von Dir beschriebene Umstand kommt allerdings erschwerend hinzu.

    Wozu willst Du eigentlich den Namen einer Variablen wissen, egal wann?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah

      ich vermute eher, dass das totaler Quatsch ist, weil niemand den Entwickler zwingt, ein erzeugtes Objekt in exakt einer Variablen abzulegen - es können beliebig viele andere sein, auch null. Der von Dir beschriebene Umstand kommt allerdings erschwerend hinzu.

      und ich bin mittlerweile sogar fast sicher, dass das totaler Quatsch ist, weil das Objekt ja auch in einem array abgelegt sein kann

      $arr_obj[]=new a();

      Wozu willst Du eigentlich den Namen einer Variablen wissen, egal wann?

      Das Objekt selbst verfügt über eine Methode um ein dem Objekt entsprechendes html Tag auszugeben, dessen ID exakt dem Namen des Objekts entsprechen soll.

      Wäre es vielleicht machbar zu einem späteren Zeitpunkt (NACH der Instanziierung) auf den Variablennamen zuzugreifen? Oder weshalb fragst Du?

      fragt sich foomaker

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

      1. Yerf!

        Das Objekt selbst verfügt über eine Methode um ein dem Objekt entsprechendes html Tag auszugeben, dessen ID exakt dem Namen des Objekts entsprechen soll.

        Dann übergib doch den Namen beim Konstruktor und leg ihn in eine Eigenschaft "ID" des Objekts ab. Das macht dich unabhängig vom Variablenamen (der ja wie du schon gemerkt hast gar nicht existieren muss, wenn man das Objekt in einem Array oder einer Eigenschaft eines anderen objektes ablegt).

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
      2. echo $begrüßung;

        Wäre es vielleicht machbar zu einem späteren Zeitpunkt (NACH der Instanziierung) auf den Variablennamen zuzugreifen? Oder weshalb fragst Du?

        In "richtig kompilierenden" Sprachen sind zur Laufzeit Variablennamen gar nicht mehr vorhanden. PHP schleppt auch zur Laufzeit die Namen noch mit sich rum. Aber wie Cheatah schon bemerkte, kann es beliebig viele Verweise auf einen Variablen-Container geben, die nicht unbedingt an benannte Variablen gebunden sind.

        Der Name eines HTML-Elements (kein Tag!) könnte sich aus dem Klassennamen ableiten, der ändert sich zur Laufzeit eines Objekts nicht und ist ständig abfragbar. Attribute solltest du üblicherweise an zum Objekt gehörenden Plätzen (Eigenschaften) ablegen. Diese bleiben beim Objekt, egal wo (in welcher Variable) es gerade aufgehängt ist.

        echo "$verabschiedung $name";

        1. Hallo dedlfix,

          Der Name eines HTML-Elements (kein Tag!) ...

          Verzeihung. Relikt aus Kindertagen. Da habe ich noch gelernt, dass es HTML-Tags sind. *räusper*

          ... könnte sich aus dem Klassennamen ableiten, der ändert sich zur Laufzeit eines Objekts nicht und ist ständig abfragbar. ...

          Das ist mir klar. Dann hätte aber jedes von jeweils einem anderen Objekt erzeugte HTML-Element die identische ID. Genau das wollte ich vermeiden.

          |... Attribute solltest du üblicherweise an zum Objekt gehörenden Plätzen (Eigenschaften) ablegen. Diese bleiben beim Objekt, egal wo (in welcher Variable) es gerade aufgehängt ist.

          Mach ich ja eh. Sind ausserdem private bzw. protected für die abgeleiteten Klassen.

          Schätze, ich mache das so, wie schon gedacht und wie von Kai345 und Harlequin bestätigt:

          ID individuell per Konstruktor an private Eigenschaft übergeben.

          Danke an alle. *thumbs up*

          Gruß vom foomaker

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

            Der Name eines HTML-Elements könnte sich aus dem Klassennamen ableiten, der ändert sich zur Laufzeit eines Objekts nicht und ist ständig abfragbar. ...
            Das ist mir klar. Dann hätte aber jedes von jeweils einem anderen Objekt erzeugte HTML-Element die identische ID. Genau das wollte ich vermeiden.

            Wieso? Die ID ist doch eine Eigenschaft die pro Objekt einen eigenen Wert annehmen kann. Der Klassenname ist quasi statisch. Und solange du keine Klassenvariablen sondern normale Objektvariablen für die ID nimmst, ist doch alles in bester Ordnung.

            Was hattest du eigentlich bei Elementen vor, die kein ID-Attribut haben sollen? Mit einem Variabennamen (unter der Annahme, dass das sinnvoll ginge) bekäme das Element ja automatisch eine ID. Nimm lieber eine normale Objekt-Eigenschaft, die auch leer sein darf. Das bedeutet auch, dass du den ID-Wert nicht als zwingende Voraussetzung ansehen solltest. Beispielsweise als Array-Schlüssel für die Kindelemente eines Elements.

            echo "$verabschiedung $name";

            1. Hallo dedlfix

              genau so habe ich es jetzt umgesetzt.

              Eine ID KANN, MUSS aber nicht bei Instanziierung vergeben werden.

              Danke für die Posts.

              Gruß vom foomaker

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