2015-10-07 56 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(「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作爲第一個參數。

相關問題