2010-09-21 37 views
10

Khi tôi var_dump một đối tượng, đầu ra trông như thế này:Câu hỏi về sản lượng var_dump

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

XCTemplate là các lớp học, tất nhiên, nhưng những gì hiện các số nguyên (ở đây: 2477) sau khi # nghĩa là gì?

Trả lời

8

Đó là id duy nhất được liên kết với cá thể cụ thể đó là XCTemplate. AFAIK này không phải là tài liệu, và cũng không có cách nào để có được nó (trừ việc sử dụng var_dump()); và tôi đã xem lớp Reflection.

Từ những gì tôi đã nhìn thấy:

  • Các id là duy nhất cho mỗi instantiation; bắt đầu từ 1 và tăng thêm 1 với mỗi đối tượng mới. Điều này bao gồm mọi đối tượng; họ không phải cùng lớp.
  • Phá hủy một cá thể (ví dụ: thông qua unset) giải phóng id của nó và đối tượng instantiated tiếp theo có thể (và sẽ) sử dụng nó.
  • Nó không liên quan đến biến; ví dụ:

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

    Sẽ tạo các id khác nhau cho các cảnh báo khác nhau.

  • Đây là không giống như id tài nguyên, nơi bạn chỉ có thể chuyển đổi sang int để có được id:

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

Để thêm, trên mỗi instantiation, con số này được tăng lên. Nếu một cá thể bị xóa (không được đặt), thì cá thể của ví dụ đó sẽ được sử dụng lại cho phiên bản kế tiếp. – webbiedave

+1

Ngoài ra, nó không phải là một id cá thể của một lớp cụ thể, nhưng của bất kỳ lớp nào. – webbiedave

+1

Điều này có nghĩa là 2477 đối tượng đã được khởi tạo trong toàn bộ tập lệnh không? : O – Daniel