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
> <[email protected]> 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