1. ホーム
  2. php

[解決済み] PHPのダブルクエスチョンマーク(??)演算子の意味 [重複]について

2022-03-24 19:39:54

質問

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';

どなたか、このテーマについて正確な情報をお持ちの方はいらっしゃいませんか?

解決方法は?

php7.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

また、オリジナルのRFC https://wiki.php.net/rfc/isset_ternary


EDIT : この回答は多くのビューを得るので、少し説明します。

1 違いがあるんです。の場合は ?? とは対照的に、最初の式は一度だけ評価されます。 ? : この場合、式はまず条件部で評価され、次に"answer" 部で2回目の評価が行われます。