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