Jochem,

the point with most of these issues is that there's no common
understanding of what things like protected or static interface members
mean; from an OO point of view, they make no sense, and I was only
trying to explain why.

Unless there is a common understanding what a certain language construct
means, every way of implementing it is pretty arbitrary. So not
implementing it at all is not "self-imposed purism".

> should be - it worked in the 5.0RC1, I understood what I was 
> doing and I was happy doing it.

If these things were legal with 5.0.0 (were they really? I dunno...),
one could argue wheter it's good practise to 'suddenly' make them
E_FATAL in a minor release. However, even if they ever worked, at best
it was undocumented (=random) behaviour.

> right which meant in one particular case I had to create an 
> object especially to call the given method, very wasteful, 
> pointless and the only good reason there seems to be is some 
> academic crud which you have reiterated here.

I don't get that should have worked otherwise, but if you want to let's
discuss this one off-list.

> > In "older" code you could not 
> > mark methods as static, so the language could not check if a static 
> > call is allowed. It simply permitted the call, not setting $this.
> 
> everything I mention here is related only to my experience
> with php5 and up since Nov'03.

If a method does not access "$this", it can be used statically. So best
would be to have the "static" modifier in place to make things clear,
but that would require _you_ to add it to your pre-php5 'legacy' code. 

So, although "academically" not correct, the engine still permits it -
simply because it did so in the past in an agreed-on manner. With
E_STRICT it will addidionally tell you that as of PHP5 you have a
keyword to get it "right".

> >>also I noticed that using the keyword 'abstract' with a
> >>interface method declaration is all of a sudden (5.1RC5dev) 
> >>causing a fatal error where before (5.0.2 - 5.0.4) no error 
> >>what so ever.
> > 
> > I thought I would never write anything like that - but: What sense 
> > does "abstract" make in an interface at all?
> 
> the point is it doesn't hurt _you_ to let _me_ do it. if it 
> makes sense to me but nobody else thats no reason not to 
> allow it on grounds of principle when it is clear that it has 
> worked without problem.

"Worked without problem" is not necessarily a good argument for such
things.

However, I just found that "abstract" was also once legal in Java
(http://java.sun.com/docs/books/tutorial/java/interpack/interfaceDef.htm
l, note at the bottom). They removed it because it makes no sense
(interfaces are abstract by nature).

Now I know that this is by no means a better argument ;), but maybe a
notice instead of fatal would be enough?

> > As I understand it, E_STRICT is for complaining about stuff 
> > like "var" 
> > that was ok with PHP4 but is discouraged in PHP5. But you are using 
> > PHP5 elements in a way that make no sense to the language, so it's 
> > simply an error.
> 
> and as I understand it E_STRICT is for pedantic checking - 
> i.e. check if every t is crossed and every i dotted (so to 
> speak) nothing perse to do with php4 (or will E_STRICT be 
> dropped when support for php4 code is dropped from the engine?)

I am not really familiar with engine internals, so maybe someone more
enlighted than me could comment on this one and decide if E_NOTICE or
E_STRICT is more appropriate.

> if its not possible then I what flippin' universe have I been 
> coding in for the past 2 years??? the only thing making it 
> 'not possible' is self-imposed purism.

As you can see I changed my opinion as to "abstract". But as to
non-public and static members - you're asking for the engine to simply
ignore modifiers you explicitly give and that make no sense. Programming
languages don't work that way.

-- mp.

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

Reply via email to