Hello Jochem, Monday, August 7, 2006, 12:15:51 PM, you wrote:
> Marcus Boerger wrote: >> Hello Pierre, >> >> Monday, August 7, 2006, 11:36:57 AM, you wrote: >> >>> On Mon, 7 Aug 2006 11:16:05 +0200 >>> [EMAIL PROTECTED] (Pierre) wrote: >> >>>>> <thinking>Oh thinking and documenting is forbidden - i >>>>> see</thinking> >>>> PHP thinks for me now, and if it is about documenting, then I don't >>>> any interfaces and all the other additions, I can document everything. >> >>> Sorry, I mean I do not _need_ any of the new OO additions (private, >>> public, interface, etc...) as everything can be documented. >> >> Some people have colleagues, sometimes self discipline is not enough. >> And yes you can leave public, protected and private. But that is not >> even in any remote way connected the topic. > I had a [another] thought about the enforced strictness issue being > discussed... > the current thinking of Marcus (and his proponents) is that method signatures > must stay the same when a method is overloaded in a subclass, making std. > class signatures work exactly in the way that interface signatures work. > Pierre (and his proponents) think that this is an artificial limitation which > in the general case make php less attractive. > I am personally in the 'Pierre camp' on this one but I understand the > argument Marcus provides regarding breaking the 'is a' relationship. > (btw: I am aware of both Marcus' and Pierre's great work in the php project > and am grateful for their efforts; regardless of whether I always agree with > their personal vision of what php is and where it should be headed) > My Ideas: > ========= > idea no. 1 is: to make it so that methods originally defined as abstract to > behave like methods defined in interfaces (namely enforce strict method > signature > compliance - continue using E_FATAL for non-compatibility); and leave methods > which are not derived from an abstract definition to change their signatures > without > any penalty (not even E_STRICT). I realise that this may not do the trick for > the > strictness camp because it might not always be possible/viable to define the > required abstract method in order to enforce method signature strictness. > idea no. 2 is: to reuse the 'interface' keyword in another context, namely as > a modifier for the method definition; the idea being that any method that > overloads > a method in a baseclass that is defined as 'interface' must adhere to the > original > method signature (again using an E_FATAL for non-compatibility). obviously > doing something > like this requires hashing out the details of, for instance, what happens > when you don't > specify 'interface' for a base class method but do specify it for a > subclass's overload of > said method and/or whether the interface modifier need be specified in > overloaded methods (etc). > e.g: > class Foo { > public interface function myFoo($x) { echo $x; } // strict method > signature enforced > } > class Bar extends Foo { > public function myFoo() { echo "bar"; } // this would be E_FATAL > } > class Qux extends Foo { > public interface function myFoo($x) { echo $x; } // this is okay. > } Hmm i see some elegance here :-) Best regards, Marcus -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php