#20842 [Opn->Asn]: No explanation of object comparison and copying
| From: | jmcastagnetto@php.net | Date: | Tue, 10 Dec 2002 20:51:57 +0000 |
| Subject: | #20842 [Opn->Asn]: No explanation of object comparison and copying | ||
| References: | 1 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969350262@lists.php.net to get a copy of this message | ||
ID: 20842
Updated by: jmcastagnetto@php.net
Reported By: dparks@verinform.com
-Status: Open
+Status: Assigned
Bug Type: Documentation problem
Operating System: Any
PHP Version: 4.2.3
-Assigned To:
+Assigned To: jmcastagnetto
New Comment:
Assigning this bug to myself so I won't forget to add examples to the
docs.
Previous Comments:
------------------------------------------------------------------------
[2002-12-08 18:32:44] dparks@verinform.com
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.
------------------------------------------------------------------------
[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";
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/20842
--
Edit this bug report at http://bugs.php.net/?id=20842&edit=1