相关疑难解决方法(0)

在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)
Run Code Online (Sandbox Code Playgroud)

我需要类似的东西,但适用于类:

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
Run Code Online (Sandbox Code Playgroud)

上面的工作,但我希望更快的解决方案,或至少,一个不涉及输出缓冲区.请注意,这不一定在构造函数中使用,甚至不必在类本身内部使用!

spl_object_hash() 不是我想要的,因为这两个对象产生相同的哈希

以前的问题包含一个错误的spl_object_hash输出示例; 确保两个对象同时存在会产生稍微不同的哈希:

var_dump(spl_object_hash($foo));  // 0000000079e5f3b60000000042b31773
var_dump(spl_object_hash($foo2)); // 0000000079e5f3b50000000042b31773
Run Code Online (Sandbox Code Playgroud)

像资源一样转换为int似乎不适用于对象:

注意:类foo的对象无法转换为int.

有没有使用对象属性快速获取相同输出的方法

此外var_dump(),我通过反复试验发现debug_zval_dump()也输出了对象实例,遗憾的是它还需要输出缓冲,因为它不会返回结果.

php resources class object instance

28
推荐指数
2
解决办法
3万
查看次数

标签 统计

class ×1

instance ×1

object ×1

php ×1

resources ×1