什么是PHP函数重载?

时间:2009-10-02 23:36:30

标签: php

在像Java这样的语言中,可以通过这种方式使用重载:

void test($foo, $bar){}
int test($foo){}

然后,如果您使用2个参数调用test(),例如test($x, $y);,则会调用第一个函数。如果只传递了一个参数,例如test($x);,则会调用第二个函数。

从手册中看来,php 5确实有重载,但它的用途是什么?我似乎无法理解关于这个主题的手册..

3 个答案:

答案 0 :(得分:26)

PHP's meaning of overloading与Java不同。在PHP中,重载意味着您​​可以通过实现some of the __magic methods__get__set__call__callStatic来在运行时添加对象成员。您使用新成员加载对象。

  

PHP中的重载提供了方法   动态“创建”属性和   方法。这些动态实体是   通过魔法处理可以   在一个班级中建立各种各样的   行动类型。

一个例子:

class Foo
{
    public function __call($method, $args)
    {
        echo "Called method $method";
    }
}

$foo = new Foo;

$foo->bar(); // Called method bar
$foo->baz(); // Called method baz

顺便说一句,PHP支持PHP 4.3.0以来的这种重载。唯一的区别是,在PHP 5之前的版本中,您必须使用overload()函数显式激活重载。

答案 1 :(得分:15)

如果要重载Java中的函数,请不要指定任何参数,并使用func_num_argsfunc_get_args函数来获取传递给它的参数数量或参数本身功能:

function test() {
    $args = func_get_args();
    switch (count($args)) {
        case 1:
            // one argument passed
            break;
        case 2:
            // two arguments passed
            break;
        default:
            // illegal numer of arguments
            break;
    }
}

答案 2 :(得分:-1)

要过载函数,只需将参数默认传递为null,

class ParentClass
{
   function mymethod($arg1 = null, $arg2 = null, $arg3 = null)  
   {  
     if( $arg1 == null && $arg2 == null && $arg3 == null ){ 
        return 'function has got zero parameters <br />';
     }
     else{
       $str = '';
       if( $arg1 != null ) 
        $str .= "arg1 = ".$arg1." <br />";

       if( $arg2 != null ) 
        $str .= "arg2 = ".$arg2." <br />";

       if( $arg3 != null ) 
        $str .= "arg3 = ".$arg3." <br />";

       return $str;
      }
   }
}

// and call it in order given below ...

$obj = new ParentClass;

echo '<br />$obj->mymethod()<br />';
echo $obj->mymethod();

echo '<br />$obj->mymethod(null,"test") <br />';
echo $obj->mymethod(null,'test');

echo '<br /> $obj->mymethod("test","test","test")<br />';
echo $obj->mymethod('test','test','test');