0

在下面的代码片段中,如何printPhrase知道传递的参数是否为$aand $b(因此它使用默认值$c$aand $c(因此它使用默认值$b)?

private function printPhrase ($a, $b='black', $c='candle!' ) {
  echo $a . $b . $c; //Prints A black cat! or A black candle!
}

private function callprintPhrase () {
  printPhrase('A ', ' cat!');
}
4

2 回答 2

2

在 php 中,参数总是从左到右传递而没有跳过。所以printPhrase('A ', ' cat!');总是用函数的第一个和第二个参数填充值。

http://php.net/manual/en/functions.arguments.php#functions.arguments.default

存在跳过参数的建议。

如果你想使用默认参数,你需要像这个答案一样重写你的代码:https ://stackoverflow.com/a/9541822/1503018

于 2014-11-26T03:57:25.967 回答
0
private function callprintPhrase () {
  printPhrase('A ', ' cat!');
}

因为你已经传递了 2 个参数,所以它们将被视为 $a 和 $b 的参数。所以它可能会打印类似A cat candle!You need to pass null value in the second argument if it is to take the value of $b ie

private function callprintPhrase () {
      printPhrase('A ','', ' cat!');
    }

这会给你一个输出 A black cat!

于 2014-11-26T04:00:09.577 回答