On 18 Feb 2004 at 11:02, Brad Fisher wrote:

> 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.

Sounds very weird to me. When C overrides a method, the new one 
should essentially do the same as the old one.

In order to emulate method overloading, I think overriding is the 
wrong way. What about using a variable amount of arguments:

class A {
  function foo($a) {
  }
}

class B extends A {
  function foo() {
    $args = func_get_args();
    switch (count($args)) {
      case 1:
        return A::foo($args[0]);

      case 2:
        // New implementation...
  }
}

class C extends B {
  function foo() {
    $args = func_get_args();
    switch (count($args)) {
      case 1:
        return B::foo($args[0]);

      case 2:
        return B::foo($args[0], $args[1]);
        
      case 3:
        // ...
  }
}
 
> 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.

Nevertheless even PHP should have some fundamental rules... 
Programmers should try to avoid "dirty" hacks and work arounds 
whereever possible.

> 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!

Well, I must confess that I do not know Perl (perhaps I'm to young). 
But I said "not available in any OO language" - neither Perl nor PHP 
are OO languages in my opinion (like Java, C++) so we should not 
use Perl as a role model here :-)

> 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.

This is not even a "feature". I think it was a bug which some guys 
used for dirty hacks and work arounds (Often the difference between 
a bug and a feature is very small). Fortunately this bug has been 
fixed in PHP5.

-- 
Ferdinand Beyer
<[EMAIL PROTECTED]>

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

Reply via email to