Obecnie nie ma sposobu, aby to zrobić w PHP, począwszy od wersji 5.3.6.
spl_object_hash() nie robi tego, co chcesz - ponieważ przetwarza identyfikatory po usunięciu obiektów, spowoduje to błędy w (na przykład) obiektowo-relacyjnym oprogramowaniu odwzorowującym, które będzie próbowało śledzić obiekty w sesji.
Opis u góry strony dokumentacji ("Ta funkcja zwraca unikalny identyfikator obiektu. Ten identyfikator może być użyty jako skrót do przechowywania obiektów lub do identyfikacji obiektu.") Jest błędny - prawda jest ujawniony w notatce na tej stronie: "Gdy obiekt jest niszczony, jego skrót może być ponownie użyty dla innych obiektów", lub innymi słowy, funkcja zawsze zwraca unikalny identyfikator i zawsze może być zawsze unikalna. używany do przechowywania lub identyfikacji obiektów.
Technika demonstrowana w this comment może działać w niektórych przypadkach, ale nie jest niezawodna i nie będzie działać konsekwentnie, ponieważ próba dostępu do niezdefiniowanej właściwości wywoła metody magiczne __get() i __set(), których wyniki są nieprzewidywalne.
Podsumowując, krótka odpowiedź na twoje pytanie (niestety) brzmi "nie" - nie ma takiej metody w PHP i nie ma sposobu napisania takiej metody, która będzie działać konsekwentnie dla dowolnego obiektu.
Jeśli chciałbyś, aby zobaczyć tę funkcję dodane do PHP, proszę głosowania i/lub skomentować tutaj:
http://bugs.php.net/bug.php?id=52657
Jeśli obiekty są równe, tj. Różnią się tylko tożsamością, to skróty obiektów tworzone przez 'spl_object_hash()' mogą wyglądać bardzo podobnie. Właśnie spróbowałem i mam to: a: 00000000462ff471000000005e39f75b b: 00000000462ff46c000000005e39f75b Są różne, ale trzeba patrzeć uważnie. –
Należy także zauważyć, że komentarz dotyczący planety na stronie referencyjnej o hashach może być taki sam, gdy odniesienie jest zniszczone. – koen
@Ollie Saunders, Aby to poprawić, możesz użyć skrótu (np. SHA1) 'sql_object_hash()'. Jednak mogą * zdarzyć się kolizje, ale nie sądzę, że w tym przypadku należy się czymś martwić. – strager