如何在PHP中找到对象ID?

2022-08-30 10:23:32

我使用的是 PHP 5.2。我想找到一种方法为每个对象输出唯一的id,因此在查看日志时很容易看到哪些对象是相同的。

在 Ruby 中,我只想说object.object_id获取 Ruby 对象的内部标识符。在PHP中似乎没有明显的方法来做到这一点。

有没有一种内置的方法可以做到这一点?如果没有,您能提供任何其他建议吗?


答案 1

为此使用 spl_object_hash()。

它为每个对象实例返回一个唯一标识符,而不是类的名称,因此它似乎更适合您。

编辑:

对于 PHP < 5.2.x 用户,请参阅此答案


答案 2

目前无法在 PHP 中执行此操作,从版本 5.3.6 开始。

spl_object_hash() 不会执行您想要的操作 - 因为它会在对象被删除时回收标识符,这将导致(例如)对象关系映射器尝试跟踪会话中的对象时出错。

文档页面顶部的说明(“此函数返回对象的唯一标识符。此 ID 可用作存储对象或标识对象的哈希键。是错误的 - 真相在该页面上的注释中揭示:“当一个对象被破坏时,其哈希值可能会被重新用于其他对象”,换句话说,该函数并不总是返回唯一标识符,并且不能总是用于存储或识别对象。

本注释中演示的技术在某些情况下可能有效,但它不可靠,也不会始终如一地工作,因为尝试访问未定义的属性将调用__get()和__set()魔术方法,其结果是不可预测的。

总之,你的问题的简短答案(不幸的是)是“不” - PHP中没有这样的方法,并且没有办法编写这样一个方法,它可以一致地适用于任何对象。

如果您希望将此功能添加到 PHP 中,请在此处投票和/或评论:

http://bugs.php.net/bug.php?id=52657


推荐