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
のエラーを閉じたりする必要があります.