Php 组合?:和?功能的模式??操作员

Php 组合?:和?功能的模式??操作员,php,Php,我有一个函数,它接受一个包含大量数据的数组,例如,其中一个数据片段是'name':$data=['name'=>'John'] 现在,如果我想用一个默认值来命名,我有两个常用的选项 $name = $data['name'] ?? 'Default Name'; $name = $data['name'] ?: 'Default Name'; 其中每一个都在不同的情况下应用默认值:当'Name'键未在$data数组中定义时,第一个将给我'default Name',当'Name'键在$data

我有一个函数,它接受一个包含大量数据的数组,例如,其中一个数据片段是'name':
$data=['name'=>'John']

现在,如果我想用一个默认值来命名,我有两个常用的选项

$name = $data['name'] ?? 'Default Name';
$name = $data['name'] ?: 'Default Name';
其中每一个都在不同的情况下应用默认值:当'Name'键未在
$data
数组中定义时,第一个将给我'default Name',当'Name'键在
$data
数组中时,第二个将给我'default Name',但这是一个错误的值。另一方面,如果未设置该键,则会出现错误


但我需要一个运算符/函数,它在这两种情况下都为我提供默认值:当它为假时,如空字符串或数字0或其他什么,以及当未设置键时。

empty
使用三元将起到作用:

<?php
$data =
[
    ['name'=>'Peter'],
    ['age'=>'23'],
    ['name' => ''],
    ['name' => '0']
];

foreach($data as $entry) {
    echo
        empty($entry['name'])
        ? 'Default'
        : $entry['name']
        , "\n";
}
或可读性较差的:

foreach ($data as $entry) {
    $name = $entry['name'] ?? '' ?: 'Default';
    echo $name, "\n";
}

输出与上面相同。

那么是这样的吗

isset($x)?(!$x?'default false':$x):'default not set';
我不确定你是否可以用PHP简化这个过程。但你可以用一个函数来概括:

函数myPickyDefault($value、$defaulNull、$defaultFalse){
返回isset($value)(!$x?$defaultFalse:$x):$defaulNull;
}

tbh,我认为使用
empty()ok@treyBake什么?你能给我举个例子吗?
$name=(空($data['name'])?'defaultname':$data['name'])-empty检查是否设置了键以及假值:)情况并非如此。请赛尔夫注意,不要将第一个孩子命名为“0”。这是我试图避免的,但似乎没有更好的选择。真希望有个速记员。
foreach ($data as $entry) {
    $name = $entry['name'] ?? '' ?: 'Default';
    echo $name, "\n";
}