[解決済み] PHPの三項演算子とNULL合体演算子の比較
2022-03-20 19:39:28
質問
との違いを説明してください。
三項演算子の省略記法
(
?:
) と
NULL合体演算子
(
??
)をPHPで使用することはできますか?
どのような場合に異なる動作をし、どのような場合に同じ動作をするのでしょうか(もし、そのようなことがあれば)。
$a ?: $b
VSです。
$a ?? $b
解決方法は?
第一引数がNULLの場合、NULL合体では
E_NOTICE
未定義の変数があるとき。そのため
PHP 7.0移行ドキュメント
はこのように言っています。
null合体演算子(??)は、構文上の糖分として追加されました。 と組み合わせて三項演算子を使用する必要がある場合のために isset() を使用します。これは、最初のオペランドが存在し、かつ NULL でない場合に返します。 それ以外の場合は、2 番目のオペランドを返します。
以下は、これを示すサンプルコードです。
<?php
$a = null;
print $a ?? 'b'; // b
print "\n";
print $a ?: 'b'; // b
print "\n";
print $c ?? 'a'; // a
print "\n";
print $c ?: 'a'; // Notice: Undefined variable: c in /in/apAIb on line 14
print "\n";
$b = array('a' => null);
print $b['a'] ?? 'd'; // d
print "\n";
print $b['a'] ?: 'd'; // d
print "\n";
print $b['c'] ?? 'e'; // e
print "\n";
print $b['c'] ?: 'e'; // Notice: Undefined index: c in /in/apAIb on line 33
print "\n";
このメッセージが表示された行は、NULL合算演算子ではなく、省略形の三項演算子を使用している行です。しかし、この通知があったとしても、PHP は同じ応答を返します。
コードを実行します。 https://3v4l.org/McavC
もちろん、これは常に第1引数が
null
. NULLでなくなってしまうと、「NULL」であるか「NULLでない」かの違いになってしまいます。
??
演算子は常に最初の引数を返すのに対し
?:
は最初の引数が真である場合だけであり、これは
PHP はブーリアン型に変換します。
.
だから
$a = false ?? 'f'; // false
$b = false ?: 'g'; // 'g'
は、次のようになります。
$a
となる
false
と
$b
に等しい。
'g'
.
関連
-
[解決済み】PHP - 構文エラー、予期しないT_CONSTANT_ECAPSED_STRING [閉店].
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み] JavaScriptに「NULL合体」演算子はありますか?
-
[解決済み] NULL-COALESCING 演算子のカスタム暗黙変換の不思議な挙動
-
[解決済み] C#のnull-coalescing演算子に相当するPythonの演算子はありますか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】C言語の三項演算子に相当するGoの慣用句は何ですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] リファレンス - このシンボルは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_network_getaddresses: getaddrinfo failed: 名前またはサービスが不明
-
[解決済み】Weird PHP error: 'Can't use function return value in write context'.
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み】Netbeans 7.4 for PHPで「スーパーグローバルな$_POST配列に直接アクセスしないでください」という警告が発生する。
-
[解決済み] PHP と mod_fcgid: handle_request_ipc 関数で ap_pass_brigade が失敗する。
-
[解決済み] オートロードとは何ですか; spl_autoload、__autoload、spl_autoload_register はどのように使うのですか?
-
[解決済み] PHPのダブルクエスチョンマーク(??)演算子の意味 [重複]について