如果未定义数组元素,则设置null(默认值)

时间:2018-01-04 18:06:35

标签: php

我有一个填充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);
...

3 个答案:

答案 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);否则它返回第二个操作数。