定义数组的默认/回退值的最佳做法是什么?
说明
我的函数接受2个参数。其中一个是可供选择的一系列选项。如果尚未传递数组,则它具有默认/回退值,如示例所示:
public function selectName($howMany = 1, $seed = ['john', 'bob', 'mark', 'cindy']){...
支持问题:
a)将填充数组存储在默认参数中是个好主意吗?
b)哪个更好,一个常数,array_merge
,if(empty...
?
答案 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 ...
}