2012-11-22 12 views
5

PHP 5.3以降では、 の3項演算子の中間部分を省略することができます。式expr1?:expr3は、expr1がの場合はexpr1を、そうでない場合はexpr3を返します。さらに簡潔な方法でデフォルト値を設定できますか?

変数のデフォルト値を設定するコードを次のコードよりも簡潔にする方法はありますか?

$v = isset($v) ? $v : "default value"; 

答えて

2

ここで短い構文は次のとおりです。

isset($v) || $v="default value"; 
0

いいえ。 $vが設定されているかどうかわからない場合は、正しい方法です。

0

いいえ。三項演算子を使用している場合。

6

TL; DR - いいえ、その表現を短くすることはできません。

短縮された3進表現が暗黙のうちにisset()を実行します。これはmailing listで議論されており、その概念をカバーするifsetor RFCが作成されています。

短縮三項演算子は、すでに上記の議論の時に存在していたので、このようなものは存在しない演算子??使用してproposedた:$vが定義されていない場合

// PROPOSAL ONLY, DOES NOT WORK 
$v = $v ?? 'default value'; 

割り当て'default value'を。

しかし、このようなことは今日までメイン言語で実装されていませんでした。それまでは、あなたが書いたものはそれ以上短くすることはできません。

この恐ろしいコンストラクトは短いですが、変数がfalseに存在するが評価された場合、それはデフォルト値が割り当てられますので、それが同じではありませんのでご注意:

// DO NOT USE 
$v = @$v ?: 'default value'; 
+1

何 '$のv'がすでに設定されており、それはだ'かの「」 ' 「0」または「ヌル」または「偽」ですか? – Carlos

+1

を参照してください。しかし、私はそれが良いアプローチだとは思わない... – Carlos

+1

@jackflashしたがって、 "恐ろしい構成"の私の言及 –

2

ちょうどthisを尋ね、ここで指摘しました。 。ですから、arraykeyを使用する場合には、これが改善かもしれません

function isset_get($array, $key, $default = null) { 
    return isset($array[$key]) ? $array[$key] : $default; 
}