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

标签 php class object resources instance

我不久前在 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/

相关文章:

php - 位于 2 个不同表中的 2 个数字之间的差异的平均值

PHP 永久 cookie

java - java中的泛型父类(super class)

java - 在java中不使用私有(private)引用实现单例模式?

PHP:如何在子构造中调用父构造的私有(private)值?

php - 在php中从头到尾读取xml文件

ios - Objective-C 从字符串中获取类属性

Java 未实例化类列表

带有 var 的 JavaScript 方法

apache-flex - 如何将 3D 对象导入 Adob​​e Flex?