2012-05-30 55 views
1

我寻找一个PHP函数签名的确切类型Required ParameterPHP函数所需的参数混乱

初始化是否只与NULL使它成为一个可选的参数?即

function foo($optional=NULL, $OptionalOrRequired="Optional Or Required", $required){} 

我对第二个参数感到困惑,它是否在Required或Optional参数中?

UPDATE

我使用reflection让所有和所需的功能参数

public function getPlayer($params=3, $c){} 
// results 
$reflection->getNumberOfParameters()   -> 2 
$reflection->getNumberOfRequiredParameters() -> 2 // it should be one 

public function getPlayer($params=3, $c, $x=NULL) 
// results 
$reflection->getNumberOfParameters()   -> 3 
$reflection->getNumberOfRequiredParameters() -> 2 

正如我在一个答案,默认自带之前需要得到的,这是什么原因的反射功能返回所需参数的错误数量?

感谢

+0

基本上,你从函数声明中省略了参数的右边,即'= null',那么它是必需的,否则如果没有提供,参数就会假设你在参数声明右边指定的默认值。 – Gavin

+0

感谢您的快速回复加文,我真的很困惑这个NULL与我在第二个参数中使用的实际值。在给定的方法签名是第二个参数可选或需要? – Junaid

+0

可选的,因为你已经提供了它的默认值,如果用户在调用它时不提供一个值。 – Gavin

回答

2

'可选的论点只是一个默认值参数,该值是nullfalse,一个字符串(等)并不重要 - 如果一个函数的参数有默认值是可选的。

但是,将一个可选参数放在必需参数之前是没有意义的,因为您必须为先前的参数提供一些值(即使它是null)才能“进入”所需的参数 - 所以在最后一个“必需”参数之前的所有参数都是有效的。

一些例子:

// Bad 
function bad($optional = 'literally anything', $required) {} 

bad('required arg');    // This breaks - 'missing argument 2' 
bad('something', 'required arg'); // This works - both parameters are needed 

// Good 
function($required, $optional = 'literally anything') {} 

good('required arg');    // This works just fine, last argument has a default 
good('required arg', 'something'); // Also works fine, overrides 'literally anything' 

更新RE:反射

如上所述,把一个“可选的”参数必需的参数有效地使所需“可选”参数之前,作为值必须给予它以便永远满足方法签名。例如,如果第一个参数有默认值,第二个参数不是(比如上面的bad函数),我们需要传递第二个参数,所以我们也需要传递第一个参数,所以两者都是'需要'。如果有后续的参数与默认值,仍然只有前两个参数是必需的。

+0

plz看到我的更新问题 – Junaid

+0

对我有意义知道,谢谢:) – Junaid

+0

希望它有帮助:) – connec

1

你不能有后PHP可选参数来必需的参数。可选参数始终必须遵循所需的参数(如果有的话)。任何提供了默认值的参数(例如$param = 'default')都是可选的,并且需要任何没有默认值的参数。

-1

继续我的评论。

function test($required, $optional = null) 
{ 

} 

test(); // throws an error stating $required is missing 
test('a'); // sets $required to 'a' and $optional is null 
test('a', 'b'); // sets $required to 'a' and $optional to 'b' 
+0

这不是OP正在谈论的内容。他对可选参数首先出现的函数以及所需的参数感到困惑。例如:'功能测试($ optional = null,$ required)' – Kayla