对于 PHP 7.4,有没有比 isset 和 ternary 更好的方法? (数组值和字符串值检查)

Is there a better approach than isset and ternary for PHP 7.4? (array value and string value check)

$applicantName = (isset($params['applicant']['name']) && $params['applicant']['name'] != '') ? $params['applicant']['name'] : 

((isset($simulationCustomer['fullname']) && $simulationCustomer['fullname'] != '') ? $simulationCustomer['fullname'] :  

($simulationCustomer['name'] ?? ''));

我今天就是这个代码,当然感觉不对。在 JavaScript 中会更容易编写,PHP 中的问题是合并运算符仅适用于空值。

有没有办法写得更容易理解?

如果您只想检查变量是否已设置,您可以使用 ?? 空合并运算符。但是如果你想把 '' 当作未设置的,你需要使用 !empty(),这就排除了使用任何条件简写。您能做的最好的事情就是将 isset()!= '' 测试组合成 !empty()

$applicantName = !empty($params['applicant']['name']) ? $params['applicant']['name'] :
                    (!empty($simulationCustomer['fullname']) ? $simulationCustomer['fullname'] : 
                        ($simulationCustomer['name'] ?? ''));

使用array_filter怎么样?

$applicantName = array_values(array_filter([
    $params['applicant']['name'] ?? '',
    $simulationCustomer['fullname'] ?? ''
]))[0] ?? '';

array_values仅用于重置索引键。

或者

$names = array_filter([
    $params['applicant']['name'] ?? '',
    $simulationCustomer['fullname'] ?? ''
]);

$applicantName = reset($names) ?: '';