2

可能重复:
php函数重载

我想重新声明这样的函数:

class Name{
    function a(){ something; }
    function a($param1){ something; }
}

但它返回

Fatal error: Cannot redeclare Name::a()

在java中它只是工作。我怎样才能在 PHP 中做到这一点?

4

4 回答 4

6

使用默认参数:

class Name{
    function a($param1=null){ something; }
}

如果没有参数传递给Name::a()它,它将分配一个 $param1 的值为null. 所以基本上传递该参数成为可选的。如果你需要知道它是否有值,你可以做一个简单的检查:

if (!is_null($param1))
{
 //do something
}
于 2013-01-16T19:42:35.557 回答
4

您不会重新声明函数。相反,您可以通过为其分配默认值来使参数成为可选。像这样:

function a($param1 = null){ something; }
于 2013-01-16T19:42:41.747 回答
2

函数参数不能唯一标识一个函数。在 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);
于 2013-01-16T19:46:13.303 回答
1

不幸的是,PHP 不像 Java 那样支持方法重载。在这里看看这个解决方案:PHP函数重载
func_get_args()要走的路:

于 2013-01-16T19:43:40.980 回答