[英]Problem with optional arguments in PHP
我有一个带有四个可选参数的函数:
public function doSomething($x = null, $y = null, $a = null, $b = null) { }
但是,当我尝试调用此函数并仅指定$ y时:
$object->doSomething($y=3)
似乎忽略了我将$ y设置为3,而将$ x设置为3的情况。是否有任何原因导致PHP发生这种情况? 我以前从未遇到过这个问题...
谢谢,
担
无论参数是否可选,您都必须按照在方法签名中声明的顺序传递参数。 这意味着无论如何,您都必须在$y
之前指定$x
。
如果不需要传递$x
任何其他值,则必须传递null。 当然,您仍然可以跳过其余的可选参数:
$object->doSomething(NULL, 3)
此外,PHP不支持命名参数。 因此,您不能在调用代码中显式地编写$y
,因为在PHP中,实际上是在调用代码的范围内而不是doSomething()
方法主体的范围内设置$y
。
编辑:根据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...
}
在您的调用代码中:
$object->doSomething(array('y' => 3));
即使$ x是可选的,位置也不是,因此$ y必须是第二个参数。 尝试:
$object->doSomething(null,3);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.