私はしばしば、次の論理パターンでコードを書く必要があることに気づきます。
$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;