2010-09-21 6 views
10

Quand je var_dump un objet, la sortie ressemble à ceci:Question sur la sortie var_dump

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

XCTemplate est sa classe, bien sûr, mais qu'est-ce que l'entier (ici: 2477) après le # signifie?

Répondre

8

C'est un identifiant unique associé à cette instance particulière de XCTemplate. AFAIK cela n'est pas documenté, et aussi il n'y a aucun moyen de l'obtenir (autre que d'utiliser var_dump()); et j'ai regardé la classe Reflection.

D'après ce que j'ai vu:

  • Les ids sont uniques à chaque instanciation; commençant à 1 et incrémentant de 1 avec chaque nouvel objet. Cela inclut chaque objet; ils ne doivent pas nécessairement être de la même classe.
  • Détruire une instance (par exemple: à travers unset) libère son identifiant et l'objet instancié suivant peut (et va) l'utiliser.
  • Ce n'est pas lié à la variable; par exemple:

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

    Permet de produire des ID différents pour différentes instanciations.

  • C'est pas les mêmes que ids de ressources, où vous pouvez simplement convertir en int pour obtenir l'ID:

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

Pour ajouter, sur chaque instanciation, ce nombre est incrémenté. Si une instance est supprimée (unset), cette instance sera réutilisée pour l'instance suivante. – webbiedave

+1

En outre, ce n'est pas un ID d'instance d'une classe particulière, mais de n'importe quelle classe. – webbiedave

+1

Cela signifie-t-il que 2477 objets ont été initialisés tout au long du script? : O – Daniel