PHP における二重疑問符 (??) 演算子の意味は何ですか [重複] 質問する

PHP における二重疑問符 (??) 演算子の意味は何ですか [重複] 質問する

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 回目に評価されます。

おすすめ記事