我正在寻找 a 的确切类型Required Parameter
在 PHP 函数签名中
仅使用 NULL 初始化参数是否使其成为可选参数? IE
function foo($optional=NULL, $OptionalOrRequired="Optional Or Required", $required){}
我对第二个参数感到困惑,它是必需参数还是可选参数?
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
当我得到一个答案时,默认值出现在必需的之前,这是否是反射函数返回必需参数的错误计数的原因?
Thanks
“可选”参数只是具有默认值的参数,无论该值是null
, false
、字符串(等)并不重要 - 如果函数参数有默认值,那么它是可选的。
但是,在必需参数之前添加可选参数是没有意义的,因为您必须为前面的参数提供一些值(即使它是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'
更新回复:反思
如上所述,将“可选”参数放在必需参数之前实际上使该“可选”参数成为必需的,因为必须为其给出一个值才能满足方法签名。
例如,如果第一个参数有默认值而第二个参数没有(就像在bad
上面的函数),我们需要传递第二个参数,所以我们也需要传递第一个参数,所以两者都是“必需的”。如果后续参数具有默认值,则仍然只需要前 2 个参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)