所以我有一个类,我想让它只是设置默认值,如果它们没有被传入。例如,我可以传递一个名为$ options的数组。
function new_score($options)
{
}
然后我想要一个不同的函数,如果$ options数组中不存在具有该var名称的键,我可以将var设置为默认值;
函数定义可能如下所示:
function _set(&$key, $options, $default)
{
}
我知道有array_key_exists()
,我想我正在寻找一种方法来访问变量名。
例如:
$apple = 'orange';
如何获取字符串'apple',以便我可以找到该键?我知道我可以使用函数_set()并让它查找$ key,$ var,$ options和$ default,但我宁愿进一步抽象它。
答案 0 :(得分:3)
有两种方法可以做到这一点:
使用三元运算符一次一个:
$key = isset($array['foo']) ? $array['foo'] : 'default';
或者,作为一个整体的数组:
$defaults = array('foo' => 'bar', 'other' => 'default value');
$array = $array + $defaults;
答案 1 :(得分:3)
function method($options)
{
//First, set an array of defaults:
$defaults = array( "something" => "default value",
"something_else" => "another default");
//Second, merge the defaults with the $options received:
$options = array_merge($defaults, $options);
//Now you have an array with the received values or defaults if value not received.
echo($options["something"]);
//If you wish, you can import variables into local scope with "extract()"
//but it's better not to do this...
extract($options);
echo($something);
}
参考文献:
答案 2 :(得分:1)
这个怎么样:
class Configurable
{
private static $defaults = array (
'propertyOne'=>'defaultOne',
'propertyTwo'=>'defaultTwo'
);
private $options;
public function __construct ($options)
{
$this->options = array_merge (self::$defaults, $options);
}
}
来自the documentation for array_merge:
如果输入数组相同 字符串键,然后是后面的值 该密钥将覆盖以前的密钥 一。