Sergio Gorelyshev wrote:
Hi all.
Situation:
interface MyInterface { public static myMethod(); }
class MyClass implements MyInterface { public static myMethod() {} }
This sample will crash with message Fatal error: Access type for interface method MyInterface::myMethod() must be omitted in somefile.php on line NN
Why I'm not able to clarify call's type (static) for methods in interface? I'm predict closely that method myMethod() in all classes which implements MyInterface must be called statically. A little trick allowed to me to resolve this problem, but my question more ideological than practical.
As I understand it, an 'interface' is, by definition, never gonna have an actualy object instantiated.
true but thats not the reason - the reason is because an interface is a PUBLIC contract which a class adheres to.
Thus, there can never *BE* an object for which private/public/protected have any meaning.
private/public/protected have meaning for static/abstract classes.
You can only use the private/public/protected on the 'class' definitions.
I think that should be 'in' iso 'on'
Even if you *KNOW* that all class definitions *should* for this to be 'public' it just doesn't make sense from the strictly technical stand-point of what an 'interface' is to declare it there.
Maybe somewhere over on php-dev you could make the case for the PHP Dev Team to implement something good/interesting when public/protected/private is used there, but currently it's semanticly undefined to have it there, so it can't be there.
Disclaimer: I could easily be 100% wrong in this entire post. :-)
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php