#20842 [Opn]: No explanation of object comparison and copying
| From: | goba@php.net | Date: | Sat, 07 Dec 2002 12:40:44 +0000 |
| Subject: | #20842 [Opn]: No explanation of object comparison and copying | ||
| References: | 1 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969350224@lists.php.net to get a copy of this message | ||
ID: 20842
Updated by: goba@php.net
Reported By: dparks@verinform.com
Status: Open
Bug Type: Documentation problem
Operating System: Any
PHP Version: 4.2.3
New Comment:
Jesus, it would be nice to have your examples in the documentation. I
cannot add it right now, unfortunately.
Previous Comments:
------------------------------------------------------------------------
[2002-12-05 19:53:03] dparks@verinform.com
Argh!! Apparently, PHP evaluates
$this->val = val;
without error, treating val like 'val'. I can't find this documented in
the manual.
The code posted near the end of the bug at
http://bugs.php.net/bug.php?id=20681 (look for
[28 Nov 2:02pm]
moriyoshi@php.net) contains an error like this, which was not noticed
by 4 people. Because of this, the code returns true for all
comparisons.
The behavior you describe is what I expected. Sorry about the mixup.
It would still be nice to have an explanation about how copies
(assignment) are done on objects -- is this a deep value copy? How are
references handled?
Also, it would be nice if the comparison operator page explained how
recursion is handled.
------------------------------------------------------------------------
[2002-12-05 19:11:48] jmcastagnetto@php.net
Can you be more precise about what comparison operations you have in
mind? Remember that PHP is not OOP, it is a language that supports
OOP-style coding, so there is no inherent way of checking if 2
different instances of objects are of the same class w/ the same
properties, or two variables pointing to the same object instance.
The following code generates the expected result:
function bool2str($bool) {
if ($bool === false) {
return 'FALSE';
} else {
return 'TRUE';
}
}
class Foo {
var $flag;
function Foo($flag=true) {
$this->flag = $flag;
}
}
$o = new Foo();
$p = new Foo(false);
$q = new Foo();
// this should be true
echo bool2str($o == $q)."\n";
// this should be false
echo bool2str($o != $q)."\n";
// this should be true
echo bool2str($o === $q)."\n";
// this should be false
echo bool2str($o == $p)."\n";
// this should be false
echo bool2str($o === $p)."\n";
// this should be true
echo bool2str($o != $p)."\n";
// this should be true
echo bool2str($o !== $p)."\n";
------------------------------------------------------------------------
[2002-12-05 16:22:03] dparks@verinform.com
I cannot find any explanation of object copying or comparison in the
PHP manual (or in the user comments).
Even a note saying "don't expect comparison operators to work on
objects" would by useful -- it would have saved me a couple of days of
debugging and rewriting code.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=20842&edit=1