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

3
我有一个函数来填充一个对象。
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);
...

应该是 !empty($data['val1']) ? $obj->setVal1($data['val1']) : $obj->setVal1(null) 或者 isset($data['val1']) ? $obj->setVal1($data['val1']) : $obj->setVal1(null) - ArtisticPhoenix
3个回答

6
您可以与默认数组合并,然后$data将包含所有这些键:
$data = array_merge(['val1'=>null, 'val2'=>null, 'id'=>null], $data);

在 PHP >= 7.0 版本中,您可以使用 Null Coalescing Operator

$obj->setVal1($data['val1'] ?? null);

2

这可能是最快(输入最少的单词)的方法。如果你觉得值得,另一种更快的方法是创建一个带有默认值的类和构造函数。根据你的应用程序,使用 array_pad()array_merge() 也可能值得一试。


1
在PHP 7+中,您可以使用??,也称为null合并。
$obj->setVal1($data['val1']??null);
$obj->setVal2($data['val2']??null);
$obj->setId($data['id']??null);

点击这里查看示例

空合并运算符(??)已经被添加到 PHP7 中,作为与 isset() 结合使用三元运算符的常见情况的语法糖。如果第一个操作数存在且不为 NULL,则返回它;否则返回第二个操作数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接