Re: Call non-static method staticly raise E_STRICT, but why call a static method instancely won't
| From: | Etienne Kneuss | Date: | Sun, 24 Apr 2011 20:23:53 +0000 |
| Subject: | Re: Call non-static method staticly raise E_STRICT, but why call a static method instancely won't | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-52003@lists.php.net to get a copy of this message | ||
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.
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.
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
>