Ferdinand Beyer wrote: > On 17 Feb 2004 at 14:01, Brad Fisher wrote: > > > class D { > > function bar() { > > $c = new C; > > // I'd like to call the A::foo method of C here... > > // In PHP4, I could do something like: > > Why should one want to do that? Why should PHP allow this?
For one because PHP doesn't allow method overloading. If I have a method A::foo($a), and I want to change the prototype in B to B::foo($x, $y), then there is no way for me to call the original A::foo. I could use optional params to emulate this, and I do as often as possible, so it typically isn't a problem. Also if I know A::foo does something I need/require, and C::foo does the something a little different, and I also know A::foo is compatible with C, why shouldn't I be able to do this? Or are you saying I should add a method to C (like C::A_foo) which then calls A::foo internally? I'd hate to have to add such wrappers in all cases, though I suppose it could work as well. I guess I just like the flexibility. And of course it's a BC break, but it is a major version... > $c is not an A, it is a C. Of course C is a special version of A, so it is > compatible to A. But it still is a C. > There will be a reason why C has overridden the A implementation of > foo(). It is possible that the original implementation is not compatible > to C, so it could be a risk to call the old method. That is potentially true, but if I intentionally coded the objects to ensure compaitibility, then where's the problem? As mentioned above, it helps with getting around the missing method overloading. In my opinion, a programming language should enable the programmer to solve problems in ways that make sense for the situation. One of the great strengths of PHP is that it allows a lot of flexiblity. While it's true that such flexibility can be abused, it can also be put to uses the original designers never anticipated. > The feature you are asking for is not available in any OO language > and it even conflicts with the OOP ideology! Well, I guess I'd argue that Perl supports such calls (via $obj->SomeClass::method() syntax)... Not that I'm saying that PHP should be Perl, I much prefer coding in PHP! Anyway, the "feature" was in PHP4, and people have used such constructs. Just spend a little while looking through the comments for the Class/Object functions in the PHP manual and you'll see examples that others have posted to do this for PHP4. > -- > Ferdinand Beyer > <[EMAIL PROTECTED]> -Brad -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php