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() [重复]