PHP Nesne kimliğini bulmak için nasıl?

3 Cevap php

PHP 5.2 kullanıyorum. Ben her nesne için çıkış benzersiz bir kimliği için bir yol bulmak istiyorum, böylece nesneler aynı olduğunu görmek için günlükleri üzerinden bakıldığında çok kolay.

Ruby, sadece nesne için Ruby'nin dahili tanımlayıcı almak için object.object_id derim. PHP bunu yapmak için bariz bir yolu olmalı görünmüyor.

Bunu yapmanın bir yerleşik bir yolu var mı? Yoksa, başka bir öneriniz sunabilir?

3 Cevap

PHP bunu yapmak için hiçbir yolu sürüm 5.3.6 olarak, şu anda yok.

spl_object_hash () ne istediğinizi yapmaz - nesneler silinir zaman tanımlayıcılarını geri dönüşüme, çünkü bu hatalara yol açacaktır (örneğin) bir oturumda nesnelerin takip çalışıyorum bir nesne-ilişkisel mapper.

Dokümantasyon sayfanın üstündeki açıklaması (".. Bu fonksiyon nesne için benzersiz bir tanımlayıcı döndürür Bu kimliği nesneleri saklamak için ya da bir nesneyi tanımlamak için bir karma anahtar olarak kullanılabilir") yanlış - hakikat ortaya çıkar bu sayfada notu: "Bir nesne imha edildiğinde, karma diğer nesneler için tekrar edilebilir" ya da başka bir deyişle, işlev not her bir benzersiz bir tanımlayıcı çıkıyor edebilir ve {[(0) ]} her zaman nesneleri saklamak veya tanımlamak için kullanılır.

this comment, bazı durumlarda işe yarayabilir, ancak güvenilir değil ya sürekli çalışmak olmaz, tanımsız bir özelliğe erişmeyi deneyen beri __ get () ve __ set () sihirli yöntemler, sonuçlar çağıracağı gösterdiği tekniği öngörülemeyen olduğumuz.

Sonuç olarak, Sorunuzun kısa cevabı (maalesef) "hayır" - PHP böyle bir yöntem yoktur, ve herhangi bir nesne için sürekli çalışacak böyle bir yöntem yazmak için hiçbir yolu yoktur.

Bu özellik PHP ekledi görmek istiyorsanız, oy ve / veya buraya yorum lütfen:

http://bugs.php.net/bug.php?id=52657

Ben sınıf kimliği veya örnek kimliğiyle çıkmıyor, Rubys eserlerini object.object_id nasıl bilmiyorum?

Eğer sınıf "kimliğini" isterseniz, PHP sınıf adını kullanabilirsiniz:

<?php
$instance = new Foo();
echo get_class($instance);
?>

http://de.php.net/get_class