PHP の 3 項条件演算子は、長い間この言語の定番であり、簡潔な if-then-else ステートメントを可能にします。 PHP 5.3 では、この演算子は、使用法をさらに合理化する新しい形式を獲得しました。
以前は、三項演算子は次の形式をとっていました:
<code class="php">expr ? val_if_true : val_if_false</code>
ただし、PHP 5.3 では、中間の式を省略でき、次のようになります。
<code class="php">expr ?: val_if_false</code>
これは次と同等です:
<code class="php">expr ? expr : val_if_false</code>
検討次の例:
<code class="php">require __DIR__.'/c.php'; if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; })) throw new Exception('Error'); $c();</code>
ここでは、条件 @$_GET['c'] が false と評価された場合に、?: 演算子を使用して $c 変数にデフォルト値を割り当てます。 @$_GET['c'] が設定されていないか無効な関数の場合、$c には「Woah!」と表示される匿名関数が割り当てられます。
匿名関数に関しては、確かに以前から PHP に存在していましたが、PHP 5.3 で新たな多用途性を獲得しました。クロージャとも呼ばれる匿名関数を使用すると、名前を付けずに関数をインラインで定義できます。
上記の例では、匿名関数は次のように定義されています。
<code class="php">function() { echo 'Woah!'; }</code>
他の名前付き関数と同様に、この場合は $c 変数を使用して呼び出されます。
以上がPHP 5.3 の新機能: 凝縮された三項演算子と匿名関数?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。