Edit report at https://bugs.php.net/bug.php?id=30355&edit=1
ID: 30355
Comment by: baptiste33 at gmail dot com
Reported by: info at rhalff dot com
Summary: Weird Behaviour calling non-static method statically
Status: Wont fix
Type: Bug
Package: Scripting Engine problem
Operating System: *
PHP Version: 5.0.2
Block user comment: N
Private report: N
New Comment:
A few years later.. It's it planned to keep this "bug" as the documentation
still
says :
"Calling non-static methods statically generates an E_STRICT level warning."
Which is obviously not true.
Previous Comments:
------------------------------------------------------------------------
[2011-02-03 14:51:26] carlos dot vini at gmail dot com
This bug can be exploited for creating a kind of "multiple inheritance":
<?php
class Airplane {
public function getName() {
return 'Airplane ' . $this->name;
}
public function getPosition() {
return '- Air.';
}
}
class Car {
public function getName() {
return 'Car ' . $this->name;
}
public function getPosition() {
return '- Ground.';
}
}
class FlyingCar extends Car {
public function getName() {
return Airplane::getName();
}
}
$a = new FlyingCar();
$a->name = 'Example';
echo $a->getName();
echo $a->getPosition();
?>
Expected result:
------------------------
$this does not exist in a static context
Actual result:
-----------------------
It echoes: Airplane Example - Ground.
------------------------------------------------------------------------
[2004-10-08 21:14:33] [email protected]
For BC reasons calling a non static method statically keeps $this.
This is not my decision - often enough i suggested to fix static member
behavior now that we can declare them in PHP 5. If you ask me there is no OO in
PHP 4 and hence we should never have taken care of BC with 4.
------------------------------------------------------------------------
[2004-10-08 08:55:39] [email protected]
Marcus, can you explain why there is no bug here?
------------------------------------------------------------------------
[2004-10-07 22:51:52] info at rhalff dot com
Description:
------------
I think the behaviour below is allready known and it can be fixed declaring the
method 'static', however I still think this is a bug. The script should fail
instead of continuing incorrect behaviour.
Related to Bug #9005, #12622, #20089, #25220, #29206
Because $this behaviour was allready there in 2001, I thought $this would be a
good reminder $this feature is still present in 5.0.2
Reproduce code:
---------------
<?php
class A {
public function test()
{
$this->setValue('huh?');
}
public function test2()
{
$this->nonExistent();
}
}
class B {
public function test()
{
A::test();
}
public function setValue($v)
{
echo "$v";
}
public function test2()
{
A::test2();
}
}
$B = new B;
$B->test();
$B->test2();
?>
Expected result:
----------------
script should fail, cannot call a non-static method statically.
Actual result:
--------------
huh?
Fatal error: Call to undefined method B::nonExistent() in
/var/www/hosts/gedicht.nu/docs/static/test.php on line 12
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=30355&edit=1