Reputation: 5658
How do I get the PHP reference ID, as is possible with the var_dump
function:
// PHP 5.2.6
class Test {}
$test1 = new Test; var_dump($test1);
$test1b = $test1; var_dump($test1b);
$test2 = new Test; var_dump($test2);
Resulting in:
object(Test)#1 (0) {}
object(Test)#1 (0) {}
object(Test)#2 (0) {}
See, var_dump
can tell which references are equal without a straight-up comparison, and it prints their reference ID #1
and #2
. How do I access that reference ID?
Upvotes: 4
Views: 4795
Reputation: 13397
I'm not proud, but this works:
ob_start();
var_dump($test2);
$str = ob_get_contents();
ob_end_clean();
echo substr($str, strrpos($str, '#')+1, 1);
Upvotes: 3
Reputation: 611
Not entirely sure if you only want to get the reference id to compare 2 instances and make sure they're equal. Should that be the case, you can use the '===' operator.
$test1 === $test1b will be true whereas $test1 === $test2 will be false.
Upvotes: 0
Reputation: 400932
I suppose a solution could be to use spl_object_hash
:
This function returns a unique identifier for the object. This id can be used as a hash key for storing objects or for identifying an object.
It's not a "simple" number like what you get with var_dump
, but I suppose it's better than nothing...
For instance, with this portion of code, inspired from yours :
$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 />';
I get this output :
000000002c836d1d000000006bfbdc77
000000002c836d1d000000006bfbdc77
000000002c836d1e000000006bfbdc77
Upvotes: 10