I have two object variables in PHP, let's call them $a
and $b
. I assume they're both the same object. And, indeed, a call to spl_object_hash()
confirms this, but they each have different properties.
When I run:
if(spl_object_hash($a) === spl_object_hash($b)){
echo "SAME HASH\n";
}else{
echo "DIFFERENT HASH\n";
}
if(print_r($a,TRUE) === print_r($b,TRUE)){
echo "SAME PRINT_R\n";
}else{
echo "DIFFERENT PRINT_R\n";
}
if($a === $b){
echo "IDENTICAL";
}else{
echo "NOT IDENTICAL";
}
I get:
SAME HASH
DIFFERENT PRINT_R
NOT IDENTICAL
This has got me baffled. When is the same object actually two different objects?
There is a difference between being the same object, and having the same properties.
Depending on the PHP version and the operating system, PHP might cast the two compared hash strings to integers before comparing them (because they look numeric). Either because the resulting numbers are very large, or contain letters, the casting could result in data loss and thus lead to the same int value for both strings. Try this: