php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #35053 === is wrong for objects and also stupid
Submitted: 2005-11-01 17:02 UTC Modified: 2005-11-01 17:30 UTC
Votes:23
Avg. Score:4.3 ± 1.0
Reproduced:19 of 20 (95.0%)
Same Version:6 (31.6%)
Same OS:10 (52.6%)
From: sam at liddicott dot com Assigned:
Status: Wont fix Package: Scripting Engine problem
PHP Version: 4.4.0 OS: Linux
Private report: No CVE-ID:
Have you experienced this issue?
Rate the importance of this bug to you:

 [2005-11-01 17:02 UTC] sam at liddicott dot com
Description:
------------
=== does not compare two objects for identity, it compares the values of their fields, and recursively at that! It gives wrong answers and in some cases fails altogether!

Would you believe that === reports two different objects as being the same object, when they are not references?

Why can't it just check if they have the same storage address, that should be quick, painless and accurate!

There should be some way to tell when two object references refer to the same object (apart hack in an extra field and see if it appears in the other)

Reproduce code:
---------------
<?php

$t->name='t';
$e->name='e';

$t->e=&$e;
$e->t=&$t;

$tt=&$t;

$a->n='n';
$b->n='n';

if ($a===$b) print "Dear me A and B are the same\n";
else print "Of course A and B are different\n";

if ($tt===$t) print "Yes, of course TT and T are the same\n";
else print "No they are not\n";
?>


Expected result:
----------------
"Of course A and B are different"
"Yes, of course TT and T are the same"

Actual result:
--------------
Dear me A and B are the same

Fatal error: Nesting level too deep - recursive dependency? in /home/sam/projects/reporter/t.php on line 17


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-11-01 17:06 UTC] derick@php.net
We can not change this behavior, as this might break existing scripts.

 [2005-11-01 17:30 UTC] sam at liddicott dot com
Well why not add a new operator ==== that does the job properly?

Or a function getAddressOfObject (a 5 liner, surely) that returns the address of the object so a numeric compare can be done, or something that does the job that needs doing?

Sam
 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Fri Apr 18 20:01:57 2014 UTC