我正在寻找PHP函数签名
中Required Parameter
的确切类型
仅使用NULL初始化参数会使其成为可选参数吗?即
function foo($optional=NULL, $OptionalOrRequired="Optional Or Required", $required){}
我对第二个参数感到困惑,是否有必需或可选参数?
更新
我正在使用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 :(得分:2)
'可选'参数只是具有默认值的参数,无论该值是null
,false
,字符串(等)无关紧要 - 如果函数参数具有默认值,是可选的。
但是,在必需参数之前放置一个可选参数是没有意义的,因为你必须给先前的参数赋予一些值(即使它是null
)以便'到达'所需的参数参数 - 所以在最后一个'required'参数之前的所有参数都是有效的。
一些例子:
// 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:反思
如上所述,在所需参数之前放置一个'optional'参数有效地使得'optional'参数成为必需,因为必须为它提供一个值才能满足方法签名。
例如,如果第一个参数有默认值而第二个参数没有(比如上面的bad
函数),我们需要传递第二个参数,所以我们也需要传递第一个参数,所以两者都是“必需的”。如果后续参数具有默认值,则仍然只需要前两个参数。
答案 1 :(得分:1)
在PHP中的可选参数之后,您无法获得所需的参数。可选参数必须始终遵循所需的参数(如果有的话)。任何提供默认值的参数(例如$param = 'default'
)都是可选的,任何没有默认值的参数都是必需的。
答案 2 :(得分:-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'