Это упрощенная версия очень большой пользовательской функции, которую я имею …
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
в качестве первого аргумента.
Других решений пока нет …