在 PHP 中获取对象的实例 ID
我不久前在StackOverflow上了解到,我们可以获取任何资源的“实例ID”,例如:
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)
我需要类似的东西,但应用于类:
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
上述方法有效,但我希望有一个更快的解决方案,或者至少是一个不涉及输出缓冲区的解决方案。请注意,这不一定在构造函数内使用,甚至在类本身内部使用!
spl_object_hash()
不是我想要的,因为这两个对象产生相同的哈希值
这个问题以前包含一个不正确的输出示例;确保两个对象同时存在会产生明显不同的哈希值:spl_object_hash
var_dump(spl_object_hash($foo)); // 0000000079e5f3b60000000042b31773
var_dump(spl_object_hash($foo2)); // 0000000079e5f3b50000000042b31773
转换为 int 之类的资源似乎不适用于对象:
通知:类 foo 的对象无法转换为 int。
有没有一种快速的方法可以在不使用对象属性的情况下获取相同的输出?
此外,我通过反复试验发现debug_zval_dump()
也输出对象实例,不幸的是,它也需要输出缓冲,因为它不返回结果。var_dump()