2015-10-07 1 views
0

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

Я сделал синтаксическую ошибку? Почему моя функция не получает значения по умолчанию?

+0

Я думаю, что ваш код прав. Когда я попробовал, он возвращает значение по умолчанию из функции. Как вы называете эту функцию? Вызвать функцию, подобную этой print_r (validate_promotional_code («код»)); то он будет печатать массив. – sixFingersMan

ответ

2

По умолчанию $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 в качестве первого аргумента.