On 12 Oct 2014, at 16:37, Robert Stoll <p...@tutteli.ch> wrote:

> Hey,
> 
> 
> 
> I just stumbled over a method call of a non-static method with self and was 
> asking myself again, why does PHP support
> this behaviour.  An example to outline what I am writing of:
> 
> 
> 
> class A{
> 
>  function foo(){
> 
>    self::bar();
> 
>  }
> 
>  function bar(){}
> 
> }
> 
> 
> 
> IMO it should not be allowed to call non-static methods with self or static. 
> Sure, it is just a small detail but for
> someone who starts learning PHP it is an unnecessary supplement.

The use of self::, static:: (or parent:: for that matter) itself doesn’t make a 
method call static; it’s the declaration or caller context that makes it behave 
statically, i.e. $this can’t be used.

In your given example, $this is defined when A::bar() is called; interestingly, 
when this class is extended it will still only call A::bar() as opposed to 
calling $this->bar(). Whether this is useful behaviour is irrelevant :)

The use of static::bar() is kind of pointless, because AFAICT there’s no 
difference between that and $this->bar() in this particular example.

> 
> Maybe it is too drastic to disallow it in PHP 7 but yeah. I would like to 
> know what you think about it and if someone
> has a good reason why it is allowed nowadays then please help me out.
> 
> 
> 
> Cheers,
> 
> Robert
> 


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to