On Sun, Oct 12, 2014 at 12:10 PM, Nikita Popov <nikita....@gmail.com> wrote:
> On Sun, Oct 12, 2014 at 10:37 AM, 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.
>>
>> 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.
>>
>
> There's a common misconception that ::foo() denotes a static method call in
> PHP. What it actually does is a *scoped* call (which is why :: is called
> the "scope resolution operator" and not the "static access operator").
>
> What :: essentially does is give you the ability to call the implementation
> of a method in a particular class. A common application is the use of
> parent::foo() which will not call your implementation of foo(), but the one
> found in the parent class. Similarly you can use A::foo() to target a
> particular class that is even further up in the inheritance hierarchy
> (like, the grandparent-class). You can also call call a class that is
> completely outside your inheritance hierarchy, but that's deprecated since
> PHP 5.6 and will hopefully be removed in PHP 7.

Yes please, remove that non-sense.
And that will simplify some parts of code into the engine as well :-)

Julien.P

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

Reply via email to