Hiện tại không có cách nào để thực hiện việc này trong PHP, kể từ phiên bản 5.3.6.
spl_object_hash() không thực hiện những gì bạn muốn - bởi vì nó tái tạo số nhận dạng khi đối tượng bị xóa, điều này sẽ dẫn đến lỗi trong (ví dụ) trình ánh xạ đối tượng cố gắng theo dõi đối tượng trong phiên.
Mô tả ở đầu trang tài liệu ("Hàm này trả về mã định danh duy nhất cho đối tượng. Id này có thể được sử dụng làm khóa băm để lưu trữ đối tượng hoặc xác định đối tượng.") Là sai - sự thật được tiết lộ trong ghi chú trên trang đó: "Khi một đối tượng bị phá hủy, hàm băm của nó có thể được sử dụng lại cho các đối tượng khác", hay nói cách khác, hàm không luôn trả về mã định danh duy nhất và có thể không được sử dụng để lưu trữ hoặc xác định các đối tượng. Kỹ thuật được trình bày trong this comment có thể hoạt động trong một số trường hợp, nhưng nó không đáng tin cậy và sẽ không hoạt động một cách nhất quán, vì cố gắng truy cập một thuộc tính không xác định sẽ gọi phương thức ma thuật __get() và __set(). không thể đoán trước được. Trong kết luận, câu trả lời ngắn cho câu hỏi của bạn (không may) là "không" - không có phương pháp như vậy trong PHP, và không có cách nào để viết một phương pháp như thế này sẽ làm việc nhất quán cho bất kỳ đối tượng nào.
Nếu bạn muốn xem tính năng này thêm vào PHP, hãy bỏ phiếu và/hoặc bình luận ở đây:
http://bugs.php.net/bug.php?id=52657
Nguồn
2011-06-13 12:50:12
Nếu các đối tượng bằng nhau, tức là chỉ bằng cách nhận dạng băm đối tượng được tạo bởi 'spl_object_hash()' có thể xuất hiện rất giống nhau. Tôi chỉ thử nó và tôi đã nhận được điều này: a: 00000000462ff471000000005e39f75b b: 00000000462ff46c000000005e39f75b Đó là khác nhau nhưng bạn phải xem xét cẩn thận. –
Ngoài ra, lưu ý nhận xét về hành tinh trên trang tham chiếu về các băm có thể giống nhau khi tham chiếu bị hủy. – koen
@Ollie Saunders, Để sửa lỗi này, bạn có thể lấy hàm băm (ví dụ: SHA1) của 'sql_object_hash()'. Tuy nhiên, có * có thể * là va chạm, nhưng tôi không nghĩ đó là điều đáng lo ngại trong trường hợp này. – strager