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

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

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

2 ответа2

1

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

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

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

Эта кнопка

1

Не делай ту же ошибку, что и я. Адрес объекта может отличаться, в то время как объект одинаков (т.е. 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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .