Symfony フレームワーク (バージョン 4) のコードを調べていたところ、次のコードを見つけました。
$env = $_SERVER['APP_ENV'] ?? 'dev';
これが実際に何をするのかはよく分かりませんが、次のように展開されると思います。
$env = $_SERVER['APP_ENV'] != null ? $_SERVER['APP_ENV'] : 'dev';
または多分:
$env = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : 'dev';
この件に関して詳しい情報をお持ちの方はいらっしゃいますか?
注:私の質問とこの質問ほとんどの人(以前の私のように)は、二重疑問符がヌル合体演算子と呼ばれることを無視しています。したがって、この質問は初心者にとってより関連性があり、理解しやすいものです。
ベストアンサー1
これは、php 7.0 で追加された「null 合体演算子」です。その動作の定義は次のとおりです。
最初のオペランドが存在し、NULL でない場合は、その最初のオペランドを返します。それ以外の場合は、2 番目のオペランドを返します。
つまり、実際にはisset()
便利な演算子で。
これら2つは同等です1 :
$foo = $bar ?? 'something';
$foo = isset($bar) ? $bar : 'something';
ドキュメンテーション:http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.coalesce
PHP7 の新機能のリスト:http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op
そしてオリジナルのRFChttps://wiki.php.net/rfc/isset_ternary
編集: この回答は多くの閲覧数を獲得しているため、少し説明を加えます:
1違いがあります: の場合??
、最初の式は 1 回だけ評価されますが、 の場合は? :
、式は最初に条件セクションで評価され、次に「回答」セクションで 2 回目に評価されます。