如何在 Xdebug/PHPStorm 中查看对象的内存地址

如何在 Xdebug/PHPStorm 中查看对象的内存地址

在使用 Xdebug 和 PHPStorm 调试时,有没有办法查看变量、对象的分配内存地址?

不知道这是 Xdebug 或 PHPstorm 中的设置吗,但我确信这是可能的现在它只显示值而不是地址..

我的目标是看看我是否真的在其他类中使用同一个对象实例

答案1

我相信你现在已经明白了这一点,但以防万一你还没有(并且为了给一个孤独的问题提供一个答案)

(假设您已经拥有与 PHPStorm 配合使用的 xdebug,并且能够通过 PHPStorm 进行调试)
在当前版本的 PHPStorm(撰写本文时为 10.0)中,在调试窗口中,有一个带有“@”的黄色圆圈。单击该圆圈将显示内存地址。

在下面的例子中,请注意我的$ds对象。它只列出了类(DBConnection)。打开地址后,你就能看到它们了。(DBConnection@69796600

此按钮 在此处输入图片描述

答案2

不要犯和我一样的错误。对象地址可能不同,但对象是相同的(即 spl_object_hash 为两个对象返回相同的 id)。

例如,我写了这个测试:

$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));

正如预期的那样,spl_object_hash() 返回的 id 与 $a、$b 以及 $objects 中的对象相同。但是 $objects 中的对象的地址与 $a 和 $b 不同:

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

在此处输入图片描述

相关内容