Olivier Doucet schreef: > Hello everyone, > I'm wondering if the following behaviour is a bug or a feature. The case is > quite complex, so let me explain my point of view. > here is the source : > > <?php > > class MyTest { > public function myfunc() { > echo get_class($this); > } > } > class MySecondTest { > public function test() { > MyTest::myfunc(); > } > } > > $test = new MySecondTest(); > $test->test(); //output: "MySecondTest" > > ?> > > Let me explain : > In this case, $this is MySecondTest, which is relevant as it is the last > object context. But to my mind, this code should not work like this. > > Imagine you are the developer of function MyTest. You want your code to > interact with other classes and being bugproof. 'MyTest' class here seems > OK: $this is expected to be 'MyTest' because function myfunc() is expected > to be called in a non-static context. > > Programmer of the second function created this bug and this unattended > behaviour. > > Maybe this can be done : > 1/ Forbid calling the function in static context (How can I test this ? > $this is not NULL there !). actually I thought that the engine died in situations like this. I don't see any change to the behaviour in 5.3 either. > 2/ (or/and) Raise a warning or an error if a non static function is called > as a static one develop with error_reporting set to E_ALL | E_STRICT, then you'll get a big fat warning about it > 3/ Create two functions with the same name, one static and the other one > not. Unfortunately, this can't be done (yet ?). > will never happen (where 'never' = 'very very very long time, at the very least' > > What do you think ? What's your point of view on this ? I want your > feedbacks before opening a bug ticket, as it is not strictly a "bug"... I think it's inconsistent implementation. I would classify it as a bug, especially given the general trend to strict/pure OO concepts in php. there maybe underlying technical issue with the engine that means this can't be easily fixed. I would suggest asking on internals to see what their opinion is. the pragmatic solution is to not call non-static functions using static syntax. > > Olivier > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php