2010-09-21 16 views
10

Quando ho var_dump un oggetto, l'output è simile al seguente:Domanda sul uscita var_dump

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

XCTemplate è la sua classe, naturalmente, ma che cosa il numero intero (qui: 2477) dopo il # significa?

risposta

8

È un ID univoco associato a quella particolare istanza di XCTemplate. AFAIK questo non è documentato, e inoltre non c'è modo di ottenerlo (oltre all'uso di var_dump()); e ho esaminato la classe Reflection.

Da quello che ho visto:

  • Gli ID sono univoci per ogni istanziazione; a partire da 1 e incrementando di 1 con ogni nuovo oggetto. Questo include ogni oggetto; non devono essere della stessa classe.
  • Distruggere un'istanza (ad es. Tramite unset) libera il suo id e il successivo oggetto istanziato può (e lo farà) usarlo.
  • Non è correlato alla variabile; es .:

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

    Produce diversi ID per diverse istanze.

  • Questo non è lo stesso ID di risorse, dove si può solo convertire in int per ottenere l'id:

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

Per aggiungere, su ogni istanziazione, questo numero viene incrementato. Se un'istanza viene cancellata (non impostata), la # di quell'istanza verrà riutilizzata per l'istanza successiva. – webbiedave

+1

Inoltre, non è un id di istanza di una particolare classe, ma di qualsiasi classe. – webbiedave

+1

Ciò significa che 2477 oggetti sono stati inizializzati nell'intero script? : O – Daniel