#20842 [Opn]: No explanation of object comparison and copying
| From: | dparks at verinform dot com | Date: | Mon, 09 Dec 2002 00:32:45 +0000 |
| Subject: | #20842 [Opn]: No explanation of object comparison and copying | ||
| References: | 1 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969350240@lists.php.net to get a copy of this message | ||
ID: 20842
User updated by: dparks@verinform.com
Reported By: dparks@verinform.com
Status: Open
Bug Type: Documentation problem
Operating System: Any
PHP Version: 4.2.3
New Comment:
http://www.php.net/manual/en/language.constants.php
says a notice
should be generated. I did not get a notice. Maybe we have notice-level
messages turned of on php.ini or something like that? I'll check this
again when I get to work tomorrow.
Previous Comments:
------------------------------------------------------------------------
[2002-12-08 06:02:31] m.ford@lmu.ac.uk
Re:
> Argh!! Apparently, PHP evaluates
>
> $this->val = val;
>
> without error, treating val like 'val'. I can't find this documented
in
> the manual.
The following appears in the manual page for Constants
(http://www.php.net/manual/en/language.constants.php):
http://uk.php.net/manual/en/language.constants.php
> If you use an undefined constant, PHP assumes that you
> mean the name of the constant itself. A notice will be
> issued when this happens.
Admittedly this is not very obvious, but it is there. Perhaps an
additional note somewhere in the section on strings would be
appropriate, as this seems to be a fairly common error (particularly in
array subscripts!).
Cheeers!
------------------------------------------------------------------------
[2002-12-07 06:40:43] goba@php.net
Jesus, it would be nice to have your examples in the documentation. I
cannot add it right now, unfortunately.
------------------------------------------------------------------------
[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