Instanz-ID eines Objekts in PHP abrufen

Ich habe vor einiger Zeit auf StackOverflow gelernt, dasswir können die "Instanz-ID" jeder Ressource erhalten, zum Beispiel

var_dump(intval(curl_init()));  // int(2)
var_dump(intval(finfo_open())); // int(3)
var_dump(intval(curl_init()));  // int(4)
var_dump(intval(finfo_open())); // int(5)
var_dump(intval(curl_init()));  // int(6)

Ich brauche etwas ähnliches, aber auf Klassen angewendet:

class foo {
    public function __construct() {
        ob_start();
        var_dump($this); // object(foo)#INSTANCE_ID (0) { }
        echo preg_replace('~.+#(\d+).+~s', '$1', ob_get_clean());
    }
}

$foo = new foo();  // 1
$foo2 = new foo(); // 2

Das oben genannte funktioniert, aber ich habe auf eine schnellere Lösung gehofft oder zumindest eine, die keine Ausgabepuffer enthält. Bitte beachten Sie, dass dies nicht unbedingt innerhalb des Konstruktors oder sogar innerhalb der Klasse selbst verwendet werden muss!

spl_object_hash() ist nicht das, wonach ich suche, weil die beiden Objekte identische Hashes erzeugen.

Die Frage enthielt zuvor ein falsches Beispiel fürspl_object_hash Ausgabe; Wenn sichergestellt wird, dass beide Objekte gleichzeitig vorhanden sind, werden Hashes erstellt, die sich geringfügig unterscheiden:

var_dump(spl_object_hash($foo));  // 0000000079e5f3b60000000042b31773
var_dump(spl_object_hash($foo2)); // 0000000079e5f3b50000000042b31773

Casting to int like resources scheint für Objekte nicht zu funktionieren:

Beachten Objekt der Klasse foo konnte nicht in int konvertiert werden.

Ist es eine schnelle Möglichkeit, dieselbe Ausgabe zu erfassen, ohne die Objekteigenschaften zu verwenden??

Außerdemvar_dump(), Ich habe durch Versuch und Irrtum entdeckt, dassdebug_zval_dump() gibt auch die Objektinstanz aus. Leider muss auch die Ausgabe gepuffert werden, da das Ergebnis nicht zurückgegeben wird.

Antworten auf die Frage(18)

Ihre Antwort auf die Frage