2010-09-21 11 views
10

Cuando var_dump un objeto, la salida es el siguiente:Pregunta sobre la salida var_dump

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

XCTemplate es su clase, por supuesto, pero ¿qué significa el número entero (en este caso 2477) significa después de la #?

Respuesta

8

Es una identificación única asociada a esa instancia particular de XCTemplate. AFAIK esto no está documentado, y tampoco hay forma de obtenerlo (aparte de usar var_dump()); y miré en la clase Reflection.

Por lo que he visto:

  • Los ID son exclusivos de cada instanciación; comenzando en 1 e incrementando en 1 con cada objeto nuevo. Esto incluye todos los objetos; no tienen que ser de la misma clase.
  • La destrucción de una instancia (por ejemplo, a través de unset) libera su identificación y el siguiente objeto instanciado puede (y lo hará) usarla.
  • No está relacionado con la variable; por ejemplo:

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

    Producirá diferentes id para diferentes instancias.

  • Esta es no los mismos que los identificadores de recursos, donde sólo se puede convertir a int obtener el ID:

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

Para añadir, en cada instancia, este número se incrementa. Si se elimina una instancia (sin configurar), el # de esa instancia se reutilizará para la siguiente instancia. – webbiedave

+1

Además, no es un ID de instancia de una clase en particular, sino de cualquier clase. – webbiedave

+1

¿Esto significa que 2477 objetos se han inicializado a lo largo de todo el script? : O – Daniel