函数参数-数组默认值|最佳实践


Function parameter - array default value | best practice

为数组定义默认值/回退值的最佳实践是什么?

描述:

我的函数接受两个参数。其中之一是可供选择的选项数组。如果数组没有被传递,它有一个默认的/回退值,例如:

public function selectName($howMany = 1, $seed = ['john', 'bob', 'mark', 'cindy']){...
支持问题:

a)在默认参数中存储填充的数组是一个好主意吗?

b)常数array_mergeif(empty...哪个更好?

由于默认值与所有对象共享,因此最好将它们声明为static
建议将可见度降低到protected

class YourClass {
    protected static $_DEFAULT_SEED     = array('john', 'bob', 'mark', 'cindy');
    protected static $_DEFAULT_QUANTITY = 1;
    public function selectName($howMany = NULL, $seed = NULL){
        if (is_null($howMany)) {
            $howMany    = self::$_DEFAULT_QUANTITY;
        }
        if (is_null($seed)) {
            $seed       = self::$_DEFAULT_SEED;
        }
        //...
    }
}

最好传递一个空数组作为参数。

public function selectName($howMany = 1, $seed = array()){
    $myarr=['john', 'bob', 'mark', 'cindy'];
    if(count($seed)>0){
        $myarr=$seed;
    }
    /* user $myarr now*/
}

我会这么做的。在这种情况下,您只能设置这些参数,您想要更改

function f($array = null) {
   $params = array('a' => '1', 'b' => '2');    // default params
   if ($array) $params = array_replace($params, $array);
   foreach($params as $k => $v)
     echo "$k => $v 'n";
}
f();  // a => 1  b => 2 
f(array('b' => "new")); // a => 1 b => new 

在我看来,将填充的数组存储在默认参数中不是一个好主意。如果调用函数时使用的数组没有包含所需的每个键,该怎么办?

例子:

你想要

(default): ['option1' => true, 'option2' => false]
You call the function with: ['option1' => true]

现在您使用数组调用函数,但没有使用足够的键。所以在我看来,array_merge()是最好的解决方案。

在我看来,我直接在函数

中传递数组值
<?php
public function selectName($howMany = 1, $seed = false){
  $seed = (!$seed) ? array('john', 'bob', 'mark', 'cindy') : $seed;
  // rest of the job ... 
}

或者如果数组在几个函数中使用,我将它传递到一个像这样的常量类中

CONST SEED_DEFAULT_VALUE = array('john', 'bob', 'mark', 'cindy');
public function selectName($howMany = 1, $seed = false){
  $seed = (!$seed) ? self::SEED_DEFAULT_VALUE : $seed;
  // rest of the job ... 
}