PHP:获取引用ID

PHP:获取引用ID,php,Php,如何使用var\u dump函数获取PHP引用ID: // PHP 5.2.6 class Test {} $test1 = new Test; var_dump($test1); $test1b = $test1; var_dump($test1b); $test2 = new Test; var_dump($test2); 导致: object(Test)#1 (0) {} object(Test)#1 (0) {} object(Test)#2 (0) {} 请参阅,var#u

如何使用
var\u dump
函数获取PHP引用ID:

// PHP 5.2.6
class Test {}

$test1 = new Test; var_dump($test1);
$test1b = $test1;  var_dump($test1b);
$test2 = new Test; var_dump($test2);
导致:

object(Test)#1 (0) {}
object(Test)#1 (0) {}
object(Test)#2 (0) {}


请参阅,
var#u dump
可以在不进行直接比较的情况下判断哪些引用是相等的,并打印它们的引用ID
\1
\2
。如何访问该引用ID?

我想可以使用以下解决方案:

此函数返回一个唯一的 对象的标识符。这个身份证可以 可以用作存储的哈希键 对象或用于标识对象的

这不是一个“简单”的数字,就像你从
var\u dump
中得到的那样,但我认为它总比什么都没有好


例如,这部分代码受您的启发:

$test1 = new Test;
$test1b = $test1;
$test2 = new Test;

echo spl_object_hash($test1) . '<br />';
echo spl_object_hash($test1b) . '<br />';
echo spl_object_hash($test2) . '<br />';

不完全确定是否只想获取引用id来比较两个实例并确保它们相等。 如果是这种情况,您可以使用“==”运算符

$test1 === $test1b will be true whereas $test1 === $test2 will be false.

我并不骄傲,但这很有效:

ob_start();                                                                                                                                   
var_dump($test2);                                                                                                                             
$str = ob_get_contents();                                                                                                                     
ob_end_clean();                                                                                                                               

echo substr($str, strrpos($str, '#')+1, 1);  

我喜欢Pascal MARTIN的答案——好主意。顺便说一句,如果旧对象是垃圾(或弱可访问),标识符可能会重复。无论对象引用ID或哈希值是什么,它都可能是相同的。请参阅本测试。gist.github.com/SOF3/f472f849c57ade8ae5a8dc306ceba29bBe意识到
spl\u object\u hash
可能会重用hash。文档中写道:“当一个对象被销毁时,它的散列可以被其他对象重用。”
ob_start();                                                                                                                                   
var_dump($test2);                                                                                                                             
$str = ob_get_contents();                                                                                                                     
ob_end_clean();                                                                                                                               

echo substr($str, strrpos($str, '#')+1, 1);