[解決済み] 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回目の評価が行われます。
関連
-
[解決済み】空の配列要素を削除する
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。
-
[解決済み] PHPのstdClassとは何ですか?
-
[解決済み] PHPの文字列で、シングルクオートとダブルクオートの違いは何ですか?
-
[解決済み] PHPの三項演算子とNULL合体演算子の比較
-
[解決済み] PHPのキーワード'var'は何をするのですか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】PHPでyieldの意味は何ですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PHP - 構文エラー、予期しないT_CONSTANT_ECAPSED_STRING [閉店].
-
[解決済み】XAMPPポート80をPID 4の「Unable to open process」が使用中 [重複] XAMPPポート80をPID 4の「Unable to open process」が使用中。]
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み] SAJAXは死んだか?何を置き換えるべきか?
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み】file_get_contents( )が動作しない。
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み] PHP product.php?id=1 のような URL を作成する方法
-
[解決済み] PHPの三項演算子とNULL合体演算子の比較
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?