PHP函数重载的作用是什么?
在Java等语言中,重载可以通过以下方式使用:PHP函数重载的作用是什么?,php,Php,在Java等语言中,重载可以通过以下方式使用: void test($foo, $bar){} int test($foo){} 然后,如果使用两个参数调用test(),例如test($x,$y),将调用第一个函数。如果您只通过了1个参数,例如test($x),将调用第二个函数 从手册上看,PHP5似乎确实有重载,但它的用途是什么?我似乎无法理解有关此主题的手册。与Java不同。在PHP中,重载意味着您可以通过实现,如\uuuu get,\uu set,\uu call,\uu callSta
void test($foo, $bar){}
int test($foo){}
然后,如果使用两个参数调用test()
,例如test($x,$y)代码>,将调用第一个函数。如果您只通过了1个参数,例如test($x)代码>,将调用第二个函数
从手册上看,PHP5似乎确实有重载,但它的用途是什么?我似乎无法理解有关此主题的手册。与Java不同。在PHP中,重载意味着您可以通过实现,如\uuuu get
,\uu set
,\uu call
,\uu 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从PHP4.3.0开始就支持这种重载。唯一的区别是,在PHP 5之前的版本中,必须使用函数显式激活重载。如果要重载Java中的函数,请不要指定任何参数,并使用and函数获取传递给该函数的参数数或参数本身:
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;
}
}
要重载函数,只需在默认情况下将参数传递为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');
class父类
{
函数mymethod($arg1=null,$arg2=null,$arg3=null)
{
如果($arg1==null&&$arg2==null&&$arg3==null){
return“函数有零个参数
”;
}
否则{
$str='';
如果($arg1!=null)
$str.=“arg1=”.$arg1.“
”;
如果($arg2!=null)
$str.=“arg2=”.$arg2.“
”;
如果($arg3!=null)
$str.=“arg3=”.$arg3.“
”;
返回$str;
}
}
}
//并按下面给出的顺序调用它。。。
$obj=新父类;
echo“
$obj->mymethod()
”;
echo$obj->mymethod();
echo'
$obj->mymethod(null,“test”)
;
echo$obj->mymethod(null,'test');
echo'
$obj->mymethod(“测试”、“测试”、“测试”)
;
echo$obj->mymethod('test','test','test');
您给出的示例中,这种类型的重载有什么可能的优点???一个被证明非常有用的场景是当我构建一个货币转换器类时。而不是调用$converter->convert(2,'EUR','USD')
您实际上可以调用$converter->convertEurToUsd(2)代码>,在我看来,它更具可读性。您可以查看我的源代码:我使用此方法为数据库提供类似LINQ的动态接口。所以我可以做一些事情,比如$db->Select('table')->col_1[$value]->col_2[$value]->Merge('col_1');所以所有的_调用()。传递到正确的处理类(即SQL、File、Xml)。许多PHP ORM库使用uuu Get和uu set方法来完成null所说的工作。谢谢!非常感谢。我主要使用PEAR/Zend框架编码约定。我保持行长度不超过79个字符,方法尽可能短,并且在列中排列变量声明。无论如何,GitHub的语法highlighter也有它的优点:)另请参见。您可以在此链接中使用重载类: