On 15/02/2015 19:32, Marc Bennewitz wrote:

Am 15.02.2015 um 19:09 schrieb Rowan Collins:
<snip>

The static modifier for methods is part of the method signature and
method body isn't.
(That's way interfaces doesn't describe method bodies but signatures)

The static modifier defines a method as static and therefore defines
the
method is callable using "::".
More specifically, it defines that the method is *only* callable statically. There is currently no opposite keyword to say that a method can only be called non-statically, but the absence of a modifier has up until now meant that either call type is possible. An interface cannot currently forbid static calls, only the use of $this.

Our choice is between keeping that ambiguity, and introducing a new rule that any method not marked static must never be called statically (with provisos for technically non-static parent:: etc).

Regards,

The problem with the current behavior of "... the absence of a modifier has up until now meant that either call type is possible" is that the library author can't define a method as non static callable and the caller defines if $this can be used.

Agreed. Personally, I'm a great fan of symettry, so part of me would prefer to introduce a keyword for when you *can't* call a method statically, e.g. "instance function foo() { ... }". But I guess instance methods are, or at least "should" be, the majority, so it makes sense to reserve the un-annotated form for them.

I worry about how many people will still miss the deprecation warning, but then I'm a broken record on the subject of PHP's warning system needing an overhaul.

Regards,

--
Rowan Collins
[IMSoP]


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

Reply via email to