instanznummer eines objekts herausfinden

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

  • instanznummer eines objekts herausfinden

    hallo!

    ich hab grad fast das halbe manual durchforstet und keine lösung gefunden.

    also wenn man die var_dump() funktion mit einem objekt als parameter aufruft ist die ausgabe

    object(Klassenname)#Instanznummer (AnzahlVaribeln) {
    ...
    }

    wie komm ich ohne var_dump an die instanznummer?

  • #2
    Hi,

    Was kannst du denn mit der Instanznummer(?) anfangen?
    Schreibe dir eine statische Klasse, über die du die Objekte erzeugst und lass von dieser Klasse den Wert für die aktuelle Exemplarnummer in dein Objekt eintragen.

    Gruß Thomas

    Kommentar


    • #3
      ich stimme Alrik zu!
      um einwenig spass zu haben tippte ich ein paar zeilen.

      PHP-Code:
      <?
      class probe{
        var  $id;
        var  $name;
      function probe(){
        ob_start();
       var_dump($this);
       $ding=ob_get_contents();
       ob_get_clean();
       $ding= preg_match_all("/#(\d+)/",$ding,$arr);
       $this->id=intval($arr[1][0]);
      }
      }
      $p=new probe;
      $d=new probe;
      $d->name="hallo";
      var_dump($p);
      echo "<br>";
      print_r($p);
      echo "<br>";
      var_dump($d);
      echo "<br>";
      print_r($d);
      ?>
      Slava
      bituniverse.com

      Kommentar


      • #4
        Original geschrieben von Slava
        ich stimme Alrik zu!
        um einwenig spass zu haben tippte ich ein paar zeilen.

        Lies besser noch mal was Alrik vorgeschlagen hat...
        Original geschrieben von Alrik
        Was kannst du denn mit der Instanznummer(?) anfangen?
        Schreibe dir eine statische Klasse, über die du die Objekte erzeugst und lass von dieser Klasse den Wert für die aktuelle Exemplarnummer in dein Objekt eintragen.
        Er sagte "eine statische Klasse, über die du die Objekte erzeugst" und die Klasse trägt dann in eine (public) var, die Nummer ein...

        PHP-Code:
        <?php

        class deine_Klasse {
            public 
        $instanznummer;
        }

        class 
        class_container {
          static 
        $nummer;
          
          static function 
        get_obj($name) {
            if (!isset(
        self::$nummer[$name])) {
              
        self::$nummer[$name] = 0;
            }
            
        $objekt = new $name();
            
        $objekt->instanznummer = ++self::$nummer[$name];
            return 
        $objekt;
          }
        }

        $objekt class_container::get_obj('deine_Klasse');
        echo 
        $objekt->instanznummer '<br />';

        $objekt2 class_container::get_obj('deine_Klasse');
        echo 
        $objekt2->instanznummer '<br />';

        ?>
        zumindest unter php5 könnte es so aussehen. Es geht unter php4 auch, nur ist es da weniger ... OOP ^^;

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          statische variable ist gemeint
          Slava
          bituniverse.com

          Kommentar


          • #6
            Original geschrieben von Slava
            statische variable ist gemeint

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              is ja alles sehr interessant aber das will ich nicht wissen

              php scheint irgendwie mitzuzählen die wievielte instanz einer klasse ein objekt ist und das will ich rausfinden ohne irgendwelche änderungen an der klasse vorzunehmen.

              Kommentar


              • #8
                wird ohne var_dump wohl nicht gehen.
                aber beantworte doch bitte die frage, wozu das gut sein soll.

                Kommentar


                • #9
                  ich bau mir grad ein kleines debugscript und es wäre sehr praktisch wenn ich das irgendwie rausfinden könnte.

                  Kommentar


                  • #10
                    Original geschrieben von ghostgambler
                    [B]
                    Lies besser noch mal was Alrik vorgeschlagen hat...

                    Er sagte "eine statische Klasse, über die du die Objekte erzeugst" und die Klasse trägt dann in eine (public) var, die Nummer ein...
                    ich verstehe nicht was dich dabei stört?
                    damit hat er bestimmt "factory method" gemeint.
                    alles was du geschrieben hasst macht kaum anderes als er forgeschlagen hat.
                    es gibt mehrere möglichkeiten so was realisieren, sogar mit benutzen von counter der in $GLOBALS abgespeichert ist.
                    und unter php5 würde sogar so was ausreichen
                    PHP-Code:
                    <?php
                    class probe{
                      static 
                    $count=0;
                      var 
                    $nummer;
                      function 
                    probe(){
                       
                    $this->nummer = ++probe::$count
                     }
                    }
                    for (
                    $i=0;$i<10;$i++) {
                      
                    $ob=new probe;
                      echo 
                    $ob->nummer;
                      
                      }
                    leider hat er was anderes vor und unsere vorschläge sind im nichts zu nutzen.
                    Slava
                    bituniverse.com

                    Kommentar


                    • #11
                      Hi

                      slavas version halte ich bei weitem für die beste, auch wenn
                      es nicht gerade php5 ist.
                      Die factory ist mit kanonen auf spatzen.
                      Das problem ist allerdings dass man genau genommen noch
                      im dtor der klasse die variable wieder decrementieren müsste.
                      Der dtor wird allerdings in php erst aufgerufen wenn das objekt
                      nicht mehr referenziert wird oder es explizit durch unset() zerstört
                      wird. In aller regel hat man einige objekte die erst ihren scope
                      verlieren wenn das script durchgelaufen ist und "herunter gefahren"
                      wird. Zu diesem zeitpunkt nützt einem diese information selten etwas. In c++ z.B. kann man den operator-new u. placement-new
                      überladen und dort das refcounting für die klasse
                      implementieren.

                      Mir ist kein weg bekannt an diese gewünschte information auf php-ebene zu
                      kommen. var_dump ist als buildin in der lage dinge zu sehen
                      die der 0815-funktion verborgen bleiben. Z.b. die interne repräsentation
                      einer php-variablen, die "geheimnisvolle" c-struct zval.

                      Wenn es wider erwarten doch möglich sein sollte, dann bitte
                      ich um aufklärung.

                      EDIT:

                      Es gibt debug_zval_dump() aber da bekommst du auch
                      nur einen string den du parsen müsstest. Da steht
                      eben auch die anzahl der referenzen.



                      greets
                      Zuletzt geändert von closure; 22.04.2006, 19:24.
                      (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                      Kommentar


                      • #12
                        Original geschrieben von Slava
                        ich verstehe nicht was dich dabei stört?
                        damit hat er bestimmt "factory method" gemeint.
                        alles was du geschrieben hasst macht kaum anderes als er forgeschlagen hat.
                        es gibt mehrere möglichkeiten so was realisieren, sogar mit benutzen von counter der in $GLOBALS abgespeichert ist.
                        und unter php5 würde sogar so was ausreichen
                        du hast aber mit preg um dich geschmissen, was für so einen Zweck mit Kanonen auf Spatzen schießen ist, siehe mein oder dein anderes Beispiel (zumindest unter php5)

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          Original geschrieben von ghostgambler
                          du hast aber mit preg um dich geschmissen, was für so einen Zweck mit Kanonen auf Spatzen schießen ist,
                          Ich habe doch geschrieben, dass ich es aus Spass gemacht habe, und würde übrigens anderes vorgehen.
                          Ich hoffe doch, dass ein wenig Spass darf man bei jedem forum haben .
                          oder?
                          Slava
                          bituniverse.com

                          Kommentar


                          • #14
                            Ghostgambler hat es so umgesetzt, wie ich mir das vorgestellt habe. Diese Counter funktionalität direkt in die Klasse einzubauen hat eben den Nachteil, dass es nicht wiederverwertbar ist und ich jeder Klasse diesen Teil einbauen müsste.
                            Lasse ich eine andere Klasse diese Arbeit übernehmen, so kann ich es auf beliebige Klassen anwenden ohne bestehende Klassen modifizieren zu müssen und kann noch zusätzliche Methoden anfügen.

                            "is ja alles sehr interessant aber das will ich nicht wissen"
                            Genau das macht doch die Klasse.

                            "php scheint irgendwie mitzuzählen die wievielte instanz einer klasse ein objekt ist und das will ich rausfinden ohne irgendwelche änderungen an der klasse vorzunehmen."
                            Die einzige Änderung die du brauchst, ist eine Variable, um die Nummer festzuhalten.
                            Aber das ist natürlich zuviel Aufwand, mh?

                            Kommentar


                            • #15
                              "Die einzige Änderung die du brauchst, ist eine Variable, um die Nummer festzuhalten.
                              Aber das ist natürlich zuviel Aufwand, mh?"

                              nö aufwand is das nicht. aber ich möchte das nicht machen. wenn alles so funktioniert wie ich das möchte dann läuft das debugscript sozusagen als host für jedes beliebige andere script und sammelt dabei informationen über den ablauf. wenn ich jetzt in all meinen scripten klassen erweitere nur um an diese dämliche zahl zu kommen is das einfach sinnlos (ich hab sehr sehr viele scripte).

                              ich dachte mir nur das es irgendwie möglich sein müsste an diese zahl zu kommen weil php selbst das ja auch schafft und eigendlich eine funktion dazu zur verfügung stellen könnte.

                              Kommentar

                              Lädt...
                              X