繁体   English   中英

PHP中的可选参数问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM