我有一个函数,它有四个可选参数:
public function doSomething($x = null, $y = null, $a = null, $b = null) { }
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试调用此函数并仅指定$ y时:
$object->doSomething($y=3)
Run Code Online (Sandbox Code Playgroud)
它似乎忽略了我将$ y设置为3,而是将$ x设置为3.有没有理由为什么这可能发生在PHP?我之前从未习惯过这个问题......
谢谢,
担
您必须按照在方法签名中声明的顺序传递参数,无论它们是否可选.这意味着你必须$x在之前指定$y,无论如何.
如果您不需要传递任何其他值$x,则必须传递null.您仍然可以跳过剩余的可选参数,当然:
$object->doSomething(NULL, 3)
Run Code Online (Sandbox Code Playgroud)
此外,PHP不支持命名参数.因此,您无法$y在调用代码中显式写入,因为在PHP中实际设置$y在调用代码的范围内,而不是在doSomething()方法体的范围内.
编辑:根据dpk的建议,作为替代路线,您可以更改方法以接受哈希(关联数组),并可选择将某些默认值及其extract()值覆盖到范围中:
public function doSomething(array $args = array()) {
$defaults = array('x' => NULL, 'y' => NULL, 'a' => NULL, 'b' => NULL);
extract(array_merge($defaults, $args));
// Use $x et al as normal...
}
Run Code Online (Sandbox Code Playgroud)
在您的通话代码中:
$object->doSomething(array('y' => 3));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |