2011-11-02 162 views
-1

(也许这个问题以前已经被问过了,但是我找不到)函数参数的默认值在没有默认值的参数前面:会发生什么?

如果你有一个参数在PHP中没有默认值的参数前面有一个默认值,会发生什么?就像这样:

function myfunction($foo = 12, $bar) { 
    ... 
} 
  • PHP是否给出错误,如果是,其上的错误报告的水平?
  • 当您只用一个参数呼叫myfunction("hello")时会发生什么?
+3

你有没有问这个问题之前试过吗? – Nicolas

+0

我只是想知道所有的细节和你为什么不能重载函数的原因。 –

回答

1

是的,它会输出一个警告,而不是一个错误,即:

Warning: Missing argument 2 in call to myfunction() in FILE on line LINENO 

如果你打电话myfunction("hello")$bar是不确定的,所以它要么是空字符串或NULL,和$foo = "hello"。它只会提出一个警告,所以你的脚本仍然会执行。

为什么不切换参数的顺序?

编辑:这就是为什么它是不可能在PHP重载独立功能的一个很好的解释: PHP function overloading

+1

你指的是函数重载,不是吗?如果是这样的话,你可以在一个类中重载方法,但不是独立的函数,如下所示:http://www.php.net/manual/en/language.oop5.overloading.php – nickb

+0

我不喜欢参数名称是误导性的。假设我有'功能cr_name($ firstname,$ infix,$ lastname)'。混淆参数的顺序会很奇怪。例如,我不喜欢输入“Leonardo”,“Caprio”,“di”'。相反,我想输入它作为人类的逻辑秩序(莱昂纳多,迪,卡普里奥)。但如果一个名字没有中缀(例如George Clooney),我宁愿输入它作为''George','Clooney'',跳过'$ infix'参数。 在Java中,您可以*实现这一点,定义2个具有相同名称的方法。它被称为超载。 –

+0

谢谢@nickb,我明白了。我创建了以下代码,该代码似乎可以工作: 'public function createname(){ $ this - > __ call(__ FUNCTION__,func_get_args()); } 公共函数__call($名称,$参数){ 开关($名){ 情况下 “是createName”: 开关(计数($参数)){ 壳体2: $这 - >姓名= $参数[0]; $ this-> infix =“”; $ this-> lastname = $ arguments [1]; 休息;案例3: $ this-> firstname = $ arguments [0]; $ this-> infix = $ arguments [1]; $ this-> lastname = $ arguments [2]; 休息; } break; } }' 注意:空函数'createname()'仅供编辑器识别我的函数。 –