可能重复:
php函数重载
我想重新声明这样的函数:
class Name{
function a(){ something; }
function a($param1){ something; }
}
但它返回
Fatal error: Cannot redeclare Name::a()
在java中它只是工作。我怎样才能在 PHP 中做到这一点?
可能重复:
php函数重载
我想重新声明这样的函数:
class Name{
function a(){ something; }
function a($param1){ something; }
}
但它返回
Fatal error: Cannot redeclare Name::a()
在java中它只是工作。我怎样才能在 PHP 中做到这一点?
使用默认参数:
class Name{
function a($param1=null){ something; }
}
如果没有参数传递给Name::a()
它,它将分配一个 $param1 的值为null
. 所以基本上传递该参数成为可选的。如果你需要知道它是否有值,你可以做一个简单的检查:
if (!is_null($param1))
{
//do something
}
您不会重新声明函数。相反,您可以通过为其分配默认值来使参数成为可选。像这样:
function a($param1 = null){ something; }
函数参数不能唯一标识一个函数。在 Java 中,参数是严格定义的。这允许编译器知道您正在调用哪个函数。
但是,在 PHP 中,情况并非如此。
function a()
{
$args = func_get_args();
foreach($args as $value)
{
echo $value;
}
}
可以创建没有定义参数的函数,但仍向其传递参数。
一个(“你好”,“世界”)
会输出
你好世界
因此,PHP 无法区分 a() 和 a($arg)。因此,a() 已经定义好了。
PHP 程序员有不同的实践来处理这个单一的函数问题。
您可以使用默认值定义参数。
a($arg = '你好世界');
您可以传递混合变量类型。
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);
不幸的是,PHP 不像 Java 那样支持方法重载。在这里看看这个解决方案:PHP函数重载
是func_get_args()
要走的路: