【发布时间】:2019-02-03 12:21:19
【问题描述】:
在 PHP 中是否有一种方法可以使用在其声明中具有可选参数的函数,我不必传递已经声明了值的可选参数,而只需传递具有不同值的下一个参数进一步向下的参数列表。
假设我有一个有 4 个参数的函数,其中 2 个是必需的,2 个是可选的。我不想对可选参数使用空值。在使用中,有些情况我想使用该函数,并且第 3rd 参数的值与默认值相同,但第 4th 参数的值是不同的。
我正在寻找一个不那么冗长的解决方案,它允许我只传递与默认值不同的参数,而不考虑函数声明中的顺序。
createUrl($host, $path, $protocol='http', $port = 80) {
//doSomething
return $protocol.'://'.$host.':'.$port.'/'.$path;
}
我发现自己重复声明变量以便我可以使用函数,即使用 $port,我用函数范围之外的默认值重新声明 $protocol,即
$protocol = "http";
$port = 8080;
有没有办法在不传递 $protocol 的情况下传递第二个可选参数($port),它会“自动”填充 $protocol 的默认值,即
getHttpUrl($server, $path, $port);
这在某些语言中是可能的,例如 Dart,以命名可选参数的形式出现。请参阅此 SO 线程中的用法。他们在 PHP 中是否有类似的解决方案
【问题讨论】:
-
我也同样对此感到好奇,但这也是在设计函数/方法时对参数进行排序的重要性所在。
-
我觉得这不是您真正的问题,但您将其用作添加示例,仅作为示例。有一些方法可以解决您在此处向我们展示的问题,但可能无法将该解决方案应用于您的实际问题。你能澄清一下吗?
-
另一种可能是使用Variable-length argument lists
-
@SeverinDK 将编辑和澄清
-
是的。一个函数(或者你作为一个编码器)有两种可能来区分传入的参数:顺序或类型。或者您使用@ChrisForrence 在他的回答中描述的构造。所以你的问题的答案是:不。但是您可以在答案中找到解决方法。
标签: php