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