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

时间:2015-07-20 10:49:38

标签: php arguments

定义数组的默认/回退值的最佳做法是什么?

说明

我的函数接受2个参数。其中一个是可供选择的一系列选项。如果尚未传递数组,则它具有默认/回退值,如示例所示:

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

支持问题:

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

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

5 个答案:

答案 0 :(得分:4)

由于默认值与所有对象共享,因此最好将它们转换为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;
        }
        //...
    }
}

答案 1 :(得分:1)

最好将空数组作为参数传递。

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

答案 2 :(得分:1)

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

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 

答案 3 :(得分:0)

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

示例:

你想要

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

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

答案 4 :(得分:-1)

在我看来,我直接在函数

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

或者如果在多个函数中使用了数组,我将它传递给类似CONSTANT的类

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 ... 
}