可能重复:
php function overloading
我想重新声明这样的功能:
class Name{
function a(){ something; }
function a($param1){ something; }
}
但它返回
Fatal error: Cannot redeclare Name::a()
在java中它只是起作用。我怎么能用PHP做到这一点?
答案 0 :(得分:6)
使用默认参数:
class Name{
function a($param1=null){ something; }
}
如果没有参数传递给Name::a()
,则会指定$ param1的值为null
。所以基本上传递该参数变成可选的。如果您需要知道它是否有值,您可以进行简单的检查:
if (!is_null($param1))
{
//do something
}
答案 1 :(得分:4)
您不会重新声明某项功能。相反,您可以通过为其指定默认值来使参数可选。像这样:
function a($param1 = null){ something; }
答案 2 :(得分:2)
不唯一标识函数的函数参数。在Java中,参数是严格定义的。这允许编译器知道您正在调用哪个函数。
但是,在PHP中并非如此。
function a()
{
$args = func_get_args();
foreach($args as $value)
{
echo $value;
}
}
可以创建没有参数定义的函数,但仍然传递参数。
A( “你好”, “世界”)
会输出
你好世界
因此,PHP无法区分a()和a($ arg)。因此,a()已经定义。
PHP程序员有不同的做法来处理这个单一的功能问题。
您可以使用默认值定义参数。
a($ arg ='hello world');
您可以传递混合变量类型。
function a($mixed)
{
if(is_bool($mixed))
{
.....
}
if(is_string($mixed))
{
.....
}
}
我的偏好是使用默认的数组。它更加灵活。
function a($options=array())
{
$default = array('setting'=>true);
$options = array_merge($default,$options);
....
}
a(array('setting'=>false);
答案 3 :(得分:1)
不幸的是,PHP不像Java那样支持方法重载。请在此处查看解决方案:PHP function overloading
所以func_get_args()
是要走的路: