为数组定义默认值/回退值的最佳实践是什么?
描述:
我的函数接受两个参数。其中之一是可供选择的选项数组。如果数组没有被传递,它有一个默认的/回退值,例如:
public function selectName($howMany = 1, $seed = ['john', 'bob', 'mark', 'cindy']){...
支持问题:a)在默认参数中存储填充的数组是一个好主意吗?
b)常数array_merge
和if(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 ...
}