PHPのnull連結演算子

1645 ワード

project: blog
target: null-coalesce-operator-in-php.md
date: 2015-12-30
status: publish
tags:
    - Null Coalesce
    - PHP
categories:
    - PHP

null連結演算子は良いもので、それがあればパラメータを簡単に取得し、空の場合にデフォルト値を提供することができます.例えばjsでは||でやることができます.
function setSomething(a){
    a = a || 'some-default-value';
    // ...
}

PHPの中で、残念ながらPHPの||はいつもtrueあるいはfalseに戻って、このようにすることができません.PHP 7は??という演算子を正式に追加しました.
//   user    (    ,  'nobody')
$username = $_GET['user'] ?? 'nobody';
//    :
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

PHP 7はまだ生産環境に使える時間が長いと思いますが、現在のPHP 5で代替案はありますか?研究によると、非常に便利な代替案が完全にあります.
//   user    (    ,  'nobody')
$username = @$_GET['user'] ?: 'nobody';
//    :
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

--このコードを実行します.https://3v4l.org/aDUW8
目を丸くして見ると、前のPHP 7の例とは差が少なく、主に???:に置き換えている.これは何の鬼ですか.これが(expr1) ? (expr2) : (expr3)式の省略パターンです
式(expr 1)?(expr 2):(expr 3)expr 1がTRUEである場合の値はexpr 2、expr 1がFALSEである場合の値はexpr 3である.PHP 5.3から、三元演算子の中間部分を省略することができます.式expr 1?:expr 3は、expr 1がTRUEとして評価されたときにexpr 1を返し、そうでなければexpr 3を返す.--http://php.net/manual/zh/language.operators.comparison.php
もちろん、この代替案も完璧ではありません.$_GETの中に'user'がなければ、Notice: Undefined index: userのエラーがあるので、@でこのエラーを抑制したり、E_NOTICEのエラーを閉じたりする必要があります.