gpt4 book ai didi

php - 在 PHP 中获取对象的实例 ID

转载 作者:IT王子 更新时间:2023-10-29 01:18:08 25 4
gpt4 key购买 nike

我不久前在 StackOverflow 上了解到 we can get the "instance ID" of any resource ,例如:

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 类资源似乎不适用于对象:

Notice: Object of class foo could not be converted to int.

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

除了var_dump(),我通过反复试验发现debug_zval_dump()还输出对象实例,不幸的是它还需要输出缓冲,因为它不返回结果。

最佳答案

spl_object_hash()可以在这里帮助你。它

returns a unique identifier for the object

对于给定的实例,它总是相同的。

EDIT 在 OP 评论之后:

您可以使用静态类属性实现这样的行为,例如:

class MyClass 
{
private static $_initialized = false;

public function __construct()
{
if (!self::$_initialized) {
self::$_initialized = true;
// your run-only-once code
}
}
}

但实际上这与您的原始问题无关。

关于php - 在 PHP 中获取对象的实例 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2872366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com