在像Java这样的语言中,可以通过这种方式使用重载:
void test($foo, $bar){}
int test($foo){}
然后,如果您使用2个参数调用test()
,例如test($x, $y);
,则会调用第一个函数。如果只传递了一个参数,例如test($x);
,则会调用第二个函数。
从手册中看来,php 5确实有重载,但它的用途是什么?我似乎无法理解关于这个主题的手册..
答案 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_args
和func_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');