我有一个填充Object的函数。
public static function populateObj($data) {
$obj = new Obj();
$obj->setVal1($data['val1']);
$obj->setVal2($data['val2']);
$obj->setId($data['id']);
return $obj;
}
如果使用参数$data
给出所有值,则它可以正常工作。但如果缺少某些东西,则会抛出错误
是否有更短,更简单或更好的方法将null
设置为默认值:
$data['val1'] ? $obj->setVal1($data['val1']) : $obj->setVal1(null);
...
答案 0 :(得分:5)
您可以合并默认数组,然后$data
将包含所有这些键:
$data = array_merge(['val1'=>null, 'val2'=>null, 'id'=>null], $data);
在PHP> = 7.0中,您可以使用Null Coalescing Operator:
$obj->setVal1($data['val1'] ?? null);
答案 1 :(得分:2)
这可能是最快(最少的打字)方式。另一个可能更快的,如果值得你做的是使用default values
创建一个类和一个构造函数。根据您的申请,array_pad()
array_merge()
可能值得关注。
答案 2 :(得分:1)
在PHP 7+中,您可以使用??
a.k.a null coalesce
$obj->setVal1($data['val1']??null);
$obj->setVal2($data['val2']??null);
$obj->setId($data['id']??null);
查看示例here
空合并运算符(??)已添加(在PHP7中)作为语法糖,用于需要与isset()一起使用三元组的常见情况。它返回第一个操作数(如果存在且不为NULL);否则它返回第二个操作数。