Wie wird die Speicheradresse eines Objekts in Xdebug / PHPStorm angezeigt?


0

Gibt es eine Möglichkeit, die zugewiesene Speicheradresse einer Variablen oder eines Objekts beim Debuggen mit Xdebug und PHPStorm anzuzeigen?

Ich weiß nicht, ob dies eine Einstellung in Xdebug oder PHPstorm ist, aber ich bin mir sicher, dass dies möglich ist. Jetzt wird nur der Wert angezeigt, nicht die Adresse.

Mein Ziel ist es zu sehen, ob ich wirklich dieselbe Instanz eines Objekts in einer anderen Klasse verwende

Antworten:


1

Ich bin mir sicher, dass Sie dies bereits herausgefunden haben, aber falls Sie dies nicht getan haben (und um eine einsame Frage mit einer Antwort zu versehen)

(Dies setzt voraus, dass Sie bereits xdebug mit PHPStorm haben und in der Lage sind, über PHPStorm zu debuggen.)
In der aktuellen Version von PHPStorm (10.0 zum Zeitpunkt dieses Schreibens) befindet sich im Debug-Fenster ein gelber Kreis mit einem "@ " drin. Klicken Sie darauf, um die Speicheradressen anzuzeigen.

Beachten Sie in meinen Beispielen unten mein $dsObjekt. Es wird nur die Klasse ( DBConnection) aufgelistet . Nach dem Einschalten der Adressen können Sie diese sehen. ( DBConnection@69796600)

Diese Schaltfläche Bildbeschreibung hier eingeben


1

Mache nicht den gleichen Fehler wie ich. Die Adresse des Objekts kann unterschiedlich sein, während das Objekt identisch ist (dh spl_object_hash gibt für beide Objekte dieselbe ID zurück).

Zum Beispiel habe ich diesen Test geschrieben:

$a = $b = new StdClass;
$objects = [$a, $b];

var_dump(spl_object_hash($a), spl_object_hash($b));

foreach ($objects as $object1);

var_dump(spl_object_hash($a), spl_object_hash($b));

foreach ($objects as &$object2);

var_dump(spl_object_hash($a), spl_object_hash($b));

Wie erwartet ist die von spl_object_hash () zurückgegebene ID mit $ a, $ b und den Objekten in $ objects identisch. Die Adressen der Objekte in $ objects stimmen jedoch nicht mit $ a und $ b überein:

string(32) "000000007fbf1856000000002722d91d"
string(32) "000000007fbf1856000000002722d91d"
string(32) "000000007fbf1856000000002722d91d"
string(32) "000000007fbf1856000000002722d91d"
string(32) "000000007fbf1856000000002722d91d"
string(32) "000000007fbf1856000000002722d91d"

Bildbeschreibung hier eingeben


Nun, natürlich hat Ihr Beispiel die Speicheradresse geändert. Der Zugriff auf ein Objekt über eine Referenz bewirkt, dass der Zeiger die Adresse der neuen Variablen verwendet. Sie können dies in Aktion durch einen anderen einfachen Test sehen (trennen Sie jeden auf neue Zeilen ... Kommentare sind dumm). $a=new StdClass;$b=$a;$c=$b;echo '';$d=&$a;echo '';$e=&$b;echo '';Fügen echoSie jedem einen Haltepunkt hinzu, und Sie können beobachten, wie sich die Adressen zwischen den einzelnen Zuweisungen ändern. Ich verweise Sie auf einen netten Kommentar zu Hinweisen und Verweisen auf der PHP-Site (insbesondere das 3. Prinzip): php.net/manual/en/language.oop5.references.php#101900
Oberst
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.