2011/4/24 Etienne Kneuss <col...@php.net>:
> Hi,
>
> On Apr 24 22:13:47, Ángel González wrote:
>> reeze wrote:
>> > Hi,
>> > I am not sure it's the right place to discuss this. someday I found I call 
>> > a static method _instancely_.
>> > the method is just a helper method when reviewing my code. I know I do the 
>> > wrong thing, but PHP doesn't
>> > complain about it. then I do some tests like below:
>>
>> A few corrections to your test case so it actually works.
>> > <?php
>> > error_reporting(E_ALL ^ E_STRICT);
>> I think you want E_ALL | E_STRICT
>>
>> > class A {
>> > public function static staticFunc() {
>> This is a parse error. static should be placed before function.
>>
>> > echo "static";
>> > }
>> > public function instanceFunc() {
>> > echo "instace";
>> > }
>> > }
>> >
>> > A::instanceFunct(); // Strict Standards: Non-static method 
>> > A::instanceFunc() ...
>> And this should be A::instanceFunc();
>>
>> > $a = new A();
>> > $a->staticFunc(); // Just static no E_STRICT error raised
>> >
>> > I know it's the wrong way to do like these, maybe there are some 
>> > historical reasons to allow these.
>> > I just wonder why previous method call raise E_STRICT but later not.

Hi Etienne,

>
> Nothing wrong with it.
>
> The E_STRICT is raised because when you call a non-static method
> statically, $this will not be defined and that could be a problem (e.g.
> the method could rely on it). When you call a static method with ->, it
> remains a static call, $this will not be defined anyway, and there is
> absolutely no problem with it.

I can see your point, but I think we should drop this "feature" not to
let developers have N ways of doing the same things: if you declare a
method as static, you should be able to only call it with a static
call, not hrough an object.

PHP usually lets you do the same thing in a few ways, and that's a bit
frustrating, because we should force some kind of best practices for
the language: not .advise, but *force*.

My 2 cents,

>
>
> Best,
>
>> >
>> > Yes, something could be done doesn't means we should, but we could stop 
>> > things like happened.
>>
>> I think it may be related to inheritance.
>>
>>
>>
>> --
>> PHP Internals - PHP Runtime Development Mailing List
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>



-- 
Nadalin Alessandro
www.odino.org
www.twitter.com/_odino_

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

Reply via email to