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