私はしばしば、次の論理パターンでコードを書く必要があることに気づきます。
$foo = isset($bar) ? $bar : $baz;
?:
私は構文について知っています:
$foo = $bar ?: $baz;
...表面上、これは私が探しているもののようです。ただし、が設定されていない場合は、未定義の通知インデックスがスロー$bar
されます。また、と同じロジックを使用しますempty()
。つまり、、、などの「空の」値はFALSE
渡されません。したがって、それは実際には同等ではありません。0
"0"
が設定されていないときに通知をスローせずにそのコードを書くためのより短い方法はあり$bar
ますか?
編集:
ショートカット構文を探している理由をもう少し明確にするために、より良い例を次に示します。
$name = isset($employee->getName())
? $employee->getName()
: '<unknown>';
この場合、$employee
はサードパーティライブラリのオブジェクトである可能性があり、それがである可能性があるのは有効なシナリオであるname
可能性がありますNULL
。返された名前(存在する場合)に変数を設定したいの$name
ですが、存在しない場合はいくつかの賢明なデフォルトがあります。
メソッド呼び出しが単なるゲッターよりも複雑な場合、結果をキャッシュする必要があるため、例はさらに冗長になります。
$bar = $some->reallyExpensiveOperation();
$foo = isset($bar) ? $bar : $baz;