2010-09-21 13 views
10

Kiedy var_dump obiekt, wyjście wygląda następująco:Pytanie o wyjściu var_dump

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

XCTemplate jest jego klasa, oczywiście, ale co to liczba całkowita (tu: 2477) po # myśli?

Odpowiedz

8

Jest to unikalny identyfikator powiązany z tym konkretnym wystąpieniem XCTemplate. AFAIK to nie jest udokumentowane, a także nie ma sposobu, aby to uzyskać (inne niż przy użyciu var_dump()); i przyjrzałem się klasie Reflection.

Z tego, co widziałem:

  • Identyfikatory są unikalne dla każdej instancji; zaczynając od 1 i zwiększając o 1 przy każdym nowym obiekcie. Obejmuje to każdy obiekt; nie muszą być tej samej klasy.
  • Zniszczenie instancji (np. Poprzez unset) zwalnia jej identyfikator, a następny instancjonowany obiekt może (i będzie) z niego korzystać.
  • Nie ma związku ze zmienną; np .:

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

    Powoduje wyświetlanie różnych identyfikatorów dla różnych wystąpień.

  • To nie taka sama jak identyfikatory zasobów, gdzie można po prostu przekonwertować do int aby uzyskać identyfikator:

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

Aby dodać, na każdej instancji, ten numer jest zwiększany. Jeśli instancja zostanie usunięta (unset), numer tej instancji zostanie ponownie użyty dla następnej instancji. – webbiedave

+1

Nie jest to również identyfikator instancji określonej klasy, ale dowolnej klasy. – webbiedave

+1

Czy oznacza to, że 2477 obiektów zostało zainicjowanych w całym skrypcie? : O – Daniel