【问题标题】:php redeclaring function like in java [duplicate]php在java中重新声明函数[重复]
【发布时间】:2012-12-31 05:54:53
【问题描述】:
可能重复:
php function overloading
我想重新声明这样的函数:
class Name{
function a(){ something; }
function a($param1){ something; }
}
但它会返回
Fatal error: Cannot redeclare Name::a()
在java中它只是工作。如何在 PHP 中做到这一点?
【问题讨论】:
标签:
java
php
overloading
redeclare
【解决方案1】:
使用默认参数:
class Name{
function a($param1=null){ something; }
}
如果没有参数传递给Name::a(),它将分配一个$param1,其值为null。所以基本上传递该参数成为可选的。如果你需要知道它是否有值,你可以做一个简单的检查:
if (!is_null($param1))
{
//do something
}
【解决方案2】:
您不会重新声明函数。相反,您可以通过为其分配默认值来使参数成为可选。像这样:
function a($param1 = null){ something; }
【解决方案3】:
函数参数不能唯一标识一个函数。在 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);