自 PHP 7.0 起
事情变得容易多了——感谢Andrea Faulds和Nikita Popov提供的Null Coalescing Operator ??
Docs、Migration、RFC:
$x = $array['idx'] ?? NULL;
或带有$default
:
$x = $array['idx'] ?? $default ?? NULL;
Like isset
orempty
它不给出警告,并且表达式向右下降(如果未设置)。如果设置且不为 NULL,则取值。这也是$default
前面示例中的工作方式,即使未定义,也始终如此。
自 PHP 7.4 起
感谢Midori Kocak - 是Null Coalescing Assignment Operator ??=
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