PHP中的可选参数存在问题
我有一个函数,它有四个可选参数:PHP中的可选参数存在问题,php,Php,我有一个函数,它有四个可选参数: public function doSomething($x = null, $y = null, $a = null, $b = null) { } 但是,当我尝试调用此函数并仅指定$y时,例如: $object->doSomething($y=3) 它似乎忽略了我将$y设置为3,而将$x设置为3。有什么原因可以解释为什么PHP会出现这种情况?我以前从未有过这个问题 谢谢 Dan您必须按照在方法签名中声明的顺序传递参数,无论它们是否可选。这意味着您
public function doSomething($x = null, $y = null, $a = null, $b = null) { }
但是,当我尝试调用此函数并仅指定$y时,例如:
$object->doSomething($y=3)
它似乎忽略了我将$y设置为3,而将$x设置为3。有什么原因可以解释为什么PHP会出现这种情况?我以前从未有过这个问题
谢谢
Dan您必须按照在方法签名中声明的顺序传递参数,无论它们是否可选。这意味着您必须在
$y
之前指定$x
,无论发生什么情况
如果不需要传递任何其他值$x
,则必须传递null。当然,您仍然可以跳过其余的可选参数:
$object->doSomething(NULL, 3)
此外,PHP不支持命名参数。因此,您不能在调用代码中显式地编写$y
,因为在PHP中,它实际上将$y
设置在调用代码的范围内,而不是doSomething()
的方法体的范围内
编辑:根据dpk的建议,作为替代方法,您可以更改方法以接受散列(关联数组),并选择性地覆盖一些默认值,并将其值提取到范围中:
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);
正确的。正如OP所期望的那样,实现这一点的方法是传递一个散列作为参数(数组('y'=>3))或一些类似的数据结构(object..),谢谢-出于某种原因,我假设您可以做我正在做的事情。一定是另一种语言潜入了!