ID:               32745
 Updated by:       [EMAIL PROTECTED]
 Reported By:      jason at amp-design dot net
-Status:           Open
+Status:           Bogus
 Bug Type:         Documentation problem
 Operating System: Irrelevant
 PHP Version:      Irrelevant
 New Comment:

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php




Previous Comments:
------------------------------------------------------------------------

[2005-04-19 16:15:17] jason at amp-design dot net

Mmmm. You gotta love those generic "Thank you for taking the time to
write to us, but this is not a bug" messages, because I have yet to see
where it is in the manual ;-)

Anyway besides that, this behaviour has only occured since PHP 5.1. How
come it used to work in 5.0.x?

"If you do a $b = &$this PHP couldn't detect that $b is the 
same as $this". OK I can sort of see you have a situation where $b is
the same as $this, and therefore in this situation you would be trying
to reassign this, which you can not do (much like in C++ that operator=
needs a test to make sure you don't assign to ones self as undefined
behaviour might occur). However, tell me if I'm just being dumb and not
seeing something, but surely you can do an internal check for $b ===
$this before doing the assignment to compare the object ID's? If $b is
aready idendical to $this, you can forget the assignment as there is
nothing to do.

What gets me is this used to work in earlier versions of PHP 5.0.x, I
can't see why it breaks now as you break backward compatiblity with
scripts designed for PHP4 that use the reference operator explictly.

And, oh on a side note, the ' character in your reply in the word
"couldn\'t" seems to have been escaped 1 too many times. Maybe that a
case for another bug report ;-)

------------------------------------------------------------------------

[2005-04-18 20:15:21] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

$b = $this already creates an object-reference to $this. 
If you do a $b = &$this PHP couldn\'t detect that $b is the 
same as $this, that could be overwritten and this would 
lead to problems with the engine. 

------------------------------------------------------------------------

[2005-04-18 17:45:56] jason at amp-design dot net

Description:
------------
An incorrect message about the reassignment of $this occurs in the
5.1.x branches of PHP.

The code below doesn't product any errors...


<?php 
class A {}
$a = new A;
$b = &$a;
?>

but the "Reproduce code" produces an error when you are inside class
scope, trying to use the & operator to create a reference to $this.

Obviously the code $b = $this; does the exact same thing in PHP5,
however this is a problem as existing code (especially stuff written
for PHP4 and PHP5) will break. This is certainly the case here as this
bug arises in functions/imap_mailbox.php on line 25 of squirrel mail.

Please note this was tested using the php5-200504121430 build which is
a couple of days old now. I'm pretty sure it will remain in the latest
snapshot.

I have no idea why this comes up with the "reassigment of $this" error.
I would have thought this error would happen if the expression was
reversed to say $this = &$b.

Reproduce code:
---------------
<?php
class A {
        public function test() {
                $b = &$this;
        }
}
$a = new A;
$a->test();
?>

Expected result:
----------------
No output. $a is created and $b === $a during the scope of A::test()
for the given code above.

Actual result:
--------------
Fatal error: Cannot re-assign $this in /var/www/html/test.php on line 4


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=32745&edit=1

Reply via email to