PHP 7.0 以降
Null Coalescing Operator Docs、Migration、RFCのAndrea FauldsとNikita Popovのおかげで、物事ははるかに簡単になりました。 ??
$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 (後で見逃したものの 1 つ??
) で、デフォルト値を直接割り当てることができます。
$array['idx'] ??= null;
$x = $array['idx'];
ほど頻繁には使用しません??
が、特にデータ処理ロジックを分割して初期設定を行いたい場合は、それについて知っておくとよいでしょう。
元の古い答え
「デフォルト」値として NULL のみが必要な限り、エラー抑制演算子を利用できます。
$x = @$array['idx'];
批判:エラー抑制演算子の使用にはいくつかの欠点があります。まず、エラー抑制演算子を使用するため、コードのその部分に問題がある場合、問題を簡単に回復できません。さらに、未定義の場合の標準的なエラー状況は、悲鳴を探して汚染します。あなたのコードは、可能な限り正確に表現されていません。もう 1 つの潜在的な問題は、無効なインデックス値を使用することです。たとえば、インデックスにオブジェクトを挿入するなどです。これは見過ごされがちです。
警告を防ぎます。ただし、他のデフォルト値も許可したい場合は、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