Получить идентификатор экземпляра объекта в PHP
Я узнал некоторое время назад на StackOverflow, чтомы можем получить «идентификатор экземпляра» любого ресурса, например:
var_dump(intval(curl_init())); // int(2)
var_dump(intval(finfo_open())); // int(3)
var_dump(intval(curl_init())); // int(4)
var_dump(intval(finfo_open())); // int(5)
var_dump(intval(curl_init())); // int(6)
Мне нужно что-то подобное, но применяется к классам:
class foo {
public function __construct() {
ob_start();
var_dump($this); // object(foo)#INSTANCE_ID (0) { }
echo preg_replace('~.+#(\d+).+~s', '$1', ob_get_clean());
}
}
$foo = new foo(); // 1
$foo2 = new foo(); // 2
Все вышеперечисленное работает, но я надеялся на более быстрое решение или, по крайней мере, решение, не включающее выходные буферы. Обратите внимание, что это не обязательно будет использоваться внутри конструктора или даже внутри самого класса!
spl_object_hash()
это не то, что я ищу, потому что два объекта производят идентичные хэши
Ранее вопрос содержал неверный примерspl_object_hash
выход; обеспечение того, что оба объекта существуют одновременно, создает хэши, которые слегка различаются:
var_dump(spl_object_hash($foo)); // 0000000079e5f3b60000000042b31773
var_dump(spl_object_hash($foo2)); // 0000000079e5f3b50000000042b31773
Приведение к int как ресурсам не похоже на объекты:
Обратите внимание: Объект класса foo не может быть преобразован в int.
Есть ли быстрый способ получить тот же вывод без использования свойств объекта?
Кроме тогоvar_dump()
Я обнаружил методом проб и ошибок, чтоdebug_zval_dump()
также выводит экземпляр объекта, к сожалению, он также нуждается в буферизации вывода, поскольку не возвращает результат.