Re: method overloading in a class

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2010-08-18 at 12:35 -0400, chris h wrote:
> 
> 
> Would something like this work for you?
> 
> 
> class foo
> {
> 
> 
>    public function bar($arg1, $arg2, $arg3=null)
>   {
> 
> 
>      if (isset($arg3)){
>      {
>         return $this->_bar3($arg1, $arg2, $arg3);
> 
> 
>      } else {
>         return $this->_bar2($arg1, $arg2);
> 
> 
>      }
> 
> 
> 
>   }
> 
> 
> 
> 
> also you may want to look into the func_get_args function.
> 
> 
> 
> 
> 
> 
> 
> Chris.
> 
> 
> 
> 
> 
> 
> On Wed, Aug 18, 2010 at 12:23 PM, Ashley Sheridan
> <ash@xxxxxxxxxxxxxxxxxxxx> wrote:
> 
>         Hi list,
>         
>         I know that some languages such as C++ can overload functions
>         and
>         methods by declaring the method again with a different number
>         of
>         arguments, and the compiler internally sorts things out, but I
>         can't
>         seem to find a similar way to do this with PHP.
>         
>         Basically, what I've got at the moment is a class method with
>         2
>         arguments, and I need to be able to overload the method with 3
>         arguments. The following which would work in other languages
>         doesn't
>         seem to bring any joy in PHP:
>         
>         class foo
>         {
>            public function bar($arg1, $arg2)
>           {
>                // do something with $arg1 & $arg2
>            }
>         
>            public function bar($arg1, $arg2, $arg3)
>            {
>                // do something different with all 3 args
>            }
>         }
>         
>         Is there any feasible way of doing this? The method names
>         really need to
>         remain the same as they exist as part of a framework, but the
>         arguments
>         really server quite different purposes between the two
>         methods, so
>         there's no nice way of just merging the two functions without
>         breaking
>         the naming conventions, etc used.
>         
>         Thanks,
>         Ash
>         http://www.ashleysheridan.co.uk
>         
>         
> 
> 

Thanks to everyone, I decided to modify the existing original method and
use func_get_args() to grab the arguments passed to it. It's not
perfect, because I lose out on the automatic value assignment that I
would have with a regular method (i.e. function foo($bar, $fubar=0) etc)
but it will do at a pinch.

It's a shame this sort of overloading isn't supported, as it could be
quite a useful feature, but it's not a complete show-stopper.

Thanks,
Ash
http://www.ashleysheridan.co.uk



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux