自 PHP 7.0 起
事情要容易得多-多亏了Andrea Faulds和Nikita Popov-Null Coalescing Operator ?
文档、迁移、RFC:
$x = $array['idx'] ?? NULL;
或带 :$default
$x = $array['idx'] ?? $default ?? NULL;
like or 它没有发出警告,并且表达式会向右掉落(如果未设置)。如果设置而不是 NULL,则取值。这也是前面示例中的工作方式,即使未定义,也始终如此。isset
empty
$default
自 PHP 7.4 起
感谢 Midori Kocak - 是 Null 合并赋值运算符吗?=
Docs,RFC(这是我之后错过的事情之一)允许直接分配默认值:??
$array['idx'] ??= null;
$x = $array['idx'];
到目前为止,我不经常使用它,但很高兴了解它,特别是如果在分解数据处理逻辑并希望尽早具有默认值时。??
原始旧答案
只要您只需要 NULL 作为“默认值”值,就可以使用错误抑制运算符:
$x = @$array['idx'];
批评:使用错误抑制运算符有一些缺点。首先,它使用错误抑制运算符,因此,如果该部分代码有一些问题,则无法轻松恢复问题。此外,如果未定义,则标准错误情况确实会污染寻找尖叫声。您的代码没有像它可能的那样精确地表达自己。另一个潜在的问题是使用无效的索引值,例如为索引注入对象等。这不会引起注意。
它将防止警告。但是,如果您还想允许其他默认值,则可以通过接口封装对数组偏移量的访问:ArrayAccess
class PigArray implements ArrayAccess
{
private $array;
private $default;
public function __construct(array $array, $default = NULL)
{
$this->array = $array;
$this->default = $default;
}
public function offsetExists($offset)
{
return isset($this->array[$offset]);
}
public function offsetGet($offset)
{
return isset($this->array[$offset])
? $this->array[$offset]
: $this->default
;
}
public function offsetSet($offset, $value)
{
$this->array[$offset] = $value;
}
public function offsetUnset($offset)
{
unset($this->array[$offset]);
}
}
用法:
$array = array_fill_keys(range('A', 'C'), 'value');
$array = new PigArray($array, 'default');
$a = $array['A']; # string(13) "value"
$idx = $array['IDX']; # NULL "default"
var_dump($a, $idx);
演示:https://eval.in/80896