Вопрос о выходе var_dump

Когда я var_dump объект, результат выглядит следующим образом:

object(XCTemplate)#2477 (4) {
  ["id"]=>
  string(1) "1"
  ["attributes"]=>
  array(0) {
  }
  ["db_table_name"]=>
  string(14) "template_names"
  ["cache"]=>
  array(0) {
  }
}

XCTemplate - это его класс, конечно, но что означает целое число (здесь: 2477) после того, как # означает?

Ответ 1

Это уникальный идентификатор, связанный с этим конкретным экземпляром XCTemplate. AFAIK это не документировано, а также нет способа получить его (кроме использования var_dump()); и я просмотрел класс Reflection.

Из того, что я видел:

  • Иды уникальны для каждого экземпляра; начиная с 1 и увеличивая на 1 с каждым новым объектом. Сюда относится каждый объект; они не должны быть одного класса.
  • Уничтожение экземпляра (например: через unset) освобождает свой идентификатор, и следующий экземпляр объекта может (и будет) использовать его.
  • Это не связано с переменной; например:

    $foo = new Foo();
    var_dump($foo);
    $foo = new Foo();
    var_dump($foo);
    

    Будет выдавать другой идентификатор для разных экземпляров.

  • Это не то же самое, что и идентификаторы ресурсов, где вы можете просто преобразовать в int, чтобы получить идентификатор:

    $resource= curl_init();      
    var_dump($resource);       // resource #1 of type curl
    print(intval($resource));  // 1
    print((int) $resource);    // 1