#20760 [Opn->Csd]: strange behaviour regarding $this
| From: | vrana@php.net | Date: | Sat, 18 Sep 2004 09:11:24 +0000 |
| Subject: | #20760 [Opn->Csd]: strange behaviour regarding $this | ||
| References: | 1 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969364150@lists.php.net to get a copy of this message | ||
ID: 20760
Updated by: vrana@php.net
Reported By: krennmair at webdynamite dot com
-Status: Open
+Status: Closed
Bug Type: Documentation problem
Operating System: RedHat 8.0
PHP Version: 4.2.2
Assigned To: didou
Previous Comments:
------------------------------------------------------------------------
[2004-08-18 09:34:32] vrana@php.net
I think it's already documented at
http://www.php.net/manual/en/keyword.paamayim-nekudotayim.php
:
"In this context, there is a current object and it may have object
variables. Thus, when used from WITHIN an object function, you may use
$this and object variables."
------------------------------------------------------------------------
[2002-12-03 21:06:25] wb at sapo dot pt
i once had made the same 'mistake': i had split up a inheritance chain
at some place but then i needed a function of the other inheritance
trtee after the split. in fact, it worked out fine - so fine that i
even didn´t notice that the superclass call was outside the inheritance
chain. when i later noticed it i removed it because i got worried if it
was desired behaviour or if it could disappear in some later version of
php. but if you tell me that i can rely on it i will use it.
------------------------------------------------------------------------
[2002-12-02 05:17:04] krennmair at webdynamite dot com
OK, but mark it in the documentation with a big red callsign. ;-)
But what I'm still interested in, is _why_ this is intended. The only
reason I can think of is to confuse other programmers, but that would
be absurd.
------------------------------------------------------------------------
[2002-12-02 04:29:18] derick@php.net
This is indeed intended behavior, but it should be documented. I have
some logs about this, but can not find them now.
Derick
------------------------------------------------------------------------
[2002-12-02 04:24:24] krennmair at webdynamite dot com
We have found a strange behaviour regarding $this. One of our
programmers made a mistake during programming, which led to
"Heisenbugs", which were not quite easy to find and fix. We could
reduce the problem to a simple program to present it:
<?
class Foo {
var $bla;
function quux() {
$this->bla = 5;
}
}
class Bar {
var $bla;
function do_stuff() {
$this->bla = 10;
Foo::quux();
echo $this->bla;
}
}
$blabla = new Bar;
$blabla->do_stuff();
?>
The output is: "5"
Obviously, Bar::do_stuff() is not allowed to call Foo::quux() since
Foo::quux() is using $this. Now the strange thing comes: instead of
casting an error, PHP happily accepts the code. But the $this in
Foo::quux is the same $this as in Bar::do_stuff(), i.e. $blabla, and
that's why the output is 5. Is this behaviour intended? At least I
couldn't find it documented anywhere. IMO the user should be warned
when $this is used in a static function.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=20760&edit=1