Как увидеть адрес памяти объекта в Xdebug / PHPStorm

Есть ли способ увидеть выделенный адрес памяти переменной, объекта при отладке с помощью Xdebug и PHPStorm?

Не знаю, является ли это параметром в Xdebug или PHPstorm, но я уверен, что это возможно. Теперь он просто показывает значение, а не адрес.

Моя цель - увидеть, действительно ли я использую тот же экземпляр объекта в каком-то другом классе

2 ответа

Я уверен, что вы уже поняли это к настоящему времени, но если у вас нет (и ради предоставления одинокого вопроса с ответом)

(предполагается, что у вас уже есть xdebug, работающий с PHPStorm, и вы можете отлаживать через PHPStorm)
В текущей версии PHPStorm (10.0 на момент написания этой статьи) в окне отладки есть желтый кружок с "@" в нем. Нажав, что покажет вам адреса памяти.

В моих примерах ниже обратите внимание на мой $ds объект. Это просто перечисляет класс (DBConnection). После включения адресов вы можете их увидеть. (DBConnection@69796600)

Не делай ту же ошибку, что и я. Адрес объекта может отличаться, в то время как объект одинаков (т.е. spl_object_hash возвращает одинаковый идентификатор для обоих объектов).

Например, я написал этот тест:

$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(), совпадает с $ a, $ b и объектами в $objects. Но адрес объектов в $ objects не совпадает с адресом $ a и $b:

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

Другие вопросы по тегам