Получить идентификатор экземпляра объекта в 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() также выводит экземпляр объекта, к сожалению, он также нуждается в буферизации вывода, поскольку не возвращает результат.

Ответы на вопрос(9)

Ваш ответ на вопрос