PHP中的默认参数数组没有被输入到用户定义函数中


Default parameters array not being fed into user-defined function in PHP?

这是一个非常大的用户定义函数的简化版本…

function validate_promotional_code($code, $params = ["reference" => "code", "input-type" => "single", "delimiter" => ","]) {
  global $node_connection;
  $operator_array = [
    "Free With Purchase",
    "Buy One Get One Free"
  ];
  return $params;
}
我已经多次使用这种方法将带有默认值的关联数组传递给用户定义的函数。它允许我为函数设置默认值,而不必担心哪个变量在哪里,等等。

不幸的是,这个函数不返回任何东西,它应该返回包含默认值的$params数组。

我是否犯了语法错误?为什么我的函数没有收到我的默认值?

默认的$params数组将被您的函数使用-但仅当函数调用根本不包含$params参数时。

如果有任何值传递给$params,该值将被使用而不是您的默认值。PHP并不关心它是否是一个数组,也不会合并它。你必须自己做:

function validate_promotional_code($code, $params = []) {
    $defaults = ["reference" => "code", "input-type" => "single", "delimiter" => ","];
    $params = array_merge($defaults, $params);
    // ... work with $params ...
}

array_merge()函数将合并两个数组,而后一个数组中的值将覆盖第一个数组中的值。这就是为什么我们把$defaults作为第一个参数