ID:               34990
 User updated by:  olympic at dino-online dot de
 Reported By:      olympic at dino-online dot de
 Status:           Wont fix
 Bug Type:         Feature/Change Request
 Operating System: all
 PHP Version:      5.0.5
 New Comment:

ok, my example is missing:

error_reporting(E_ALL);

You don't get a warning, and the suggested "fix" does
of course not help - the method shouldn't be static in
my example:)


waiting for 6.0 .

However: I don't think that my suggestion to do a typecheck does break
existing code (except buggy one).


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

[2005-10-26 11:22:08] [EMAIL PROTECTED]

This is done in order to keep backward compatibility with PHP4 and you
can "fix" it easily declaring static methods as static (which is
logically right). Methods declared as static do not have access to
$this.
Most likely this will be changed in PHP6, but we didn't discuss it yet.

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

[2005-10-26 11:21:44] [EMAIL PROTECTED]

We will not change this behavior in the PHP 4 and 5 versions as it will
break scripts. It's on the list for PHP 6.

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

[2005-10-26 11:11:40] olympic at dino-online dot de

Description:
------------
In static calls $this is set. 

While in theory it might make sense to allow objects 
of the same class (or derived class) to "use" this 
feature, it's a potential pitfall and from my point 
of view it's bug.

I think if a non static method is called statically
then $this can't be any object that hasn't been
created by this or a derive class.

No other language has such a "feature" :)

If it's not a bug, then read my bugreport as 
"remove this feature". 
If it's a bug, add a runtime checking for $this is object
created by same or derived class.


Reproduce code:
---------------
Example:
Noone can really say that this is "transparen" ok:

class Foo {
        private    $hallo="I am from Foo";
        function dontCallMe() {

                return $this->hallo;
        }
}
class Bar {
        public $hallo="I am from Bar";
        function testMe() {
                return Foo::dontCallMe();
        }
}
$x=new Bar();
echo ($x->testMe()); // expected runtime error...









Expected result:
----------------
Runtime error.

Actual result:
--------------
output is: "I am from Bar"


This return the member var of Bar, what you would NEVER expect.


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


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

Reply via email to