php重新定义函数,就像在java中一样

时间:2013-01-16 19:41:30

标签: java php overloading redeclare

  

可能重复:
  php function overloading

我想重新声明这样的功能:

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

但它返回

Fatal error: Cannot redeclare Name::a()

在java中它只是起作用。我怎么能用PHP做到这一点?

4 个答案:

答案 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()是要走的路: