php在java中重新声明函数[重复]

Posted

技术标签:

【中文标题】php在java中重新声明函数[重复]【英文标题】:php redeclaring function like in java [duplicate] 【发布时间】: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 中做到这一点?

【问题讨论】:

这个答案很好地解释了它:***.com/a/4697712/1606729 【参考方案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);

【讨论】:

【参考方案4】:

不幸的是,PHP 不像 Java 那样支持方法重载。在这里查看解决方案:PHP function overloading 所以func_get_args() 是要走的路:

【讨论】:

以上是关于php在java中重新声明函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP:无法重新声明类 Comment::GetComment [重复]

Laravel 8 Custom Helper function PHP致命错误:无法重新声明以前在C:(path)Helpers.php中声明的functionName() [重复]

PHP - 覆盖现有函数[重复]

js从一个函数重新分配一个值给多个已经声明的变量[重复]

我怎样才能重新制作准备好的声明? [重复]

无法重新声明类 Composer 导致无法 Php artisan 服务