web-dev-qa-db-ja.com

isset PHP isset($ _ GET ['something'])??$ _GET ['something']: ''

私はPHPの知識を拡張したいと思っています。そして、それが何であるか、それをどのように検索するのかわからない何かに出会いました。php.netissetコードを見ていますisset($_GET['something']) ? $_GET['something'] : ''が表示されます

if(isset($_GET['something']){ If something is exists, then it is set and we will do something }などの通常のisset操作は理解していますが、?、getの繰り返し、:または ''がわかりません。誰かが私のためにこれを打破するのを助けることができますか、少なくとも正しい方向に私を向けますか?

31
user1625186

通常、「速記」または 三項演算子 と呼ばれます。

$test = isset($_GET['something']) ? $_GET['something'] : '';

手段

if(isset($_GET['something'])) {
    $test = $_GET['something'];
} else {
    $test = '';
}

分解するには:

$test = ... // assign variable
isset(...) // test
? ... // if test is true, do ... (equivalent to if)
: ... // otherwise... (equivalent to else)

または...

// test --v
if(isset(...)) { // if test is true, do ... (equivalent to ?)
    $test = // assign variable
} else { // otherwise... (equivalent to :)
70
uınbɐɥs

これは三項演算子と呼ばれ、主にif-elseステートメントの代わりに使用されます。

指定した例では、issetがtrueを返す場合、配列から値を取得するために使用できます

isset($_GET['something']) ? $_GET['something'] : ''

に等しい

if (isset($_GET['something'])) {
  $_GET['something'];
} else {
  '';
}

もちろん、何かに割り当てない限り、あまり使用されません。また、ユーザーが送信した値にデフォルト値を割り当てることもできます。

$username = isset($_GET['username']) ? $_GET['username'] : 'anonymous'
6
sciritai

Php 7からさらに短く書くことができます:

$age = $_GET['age']) ?? 27;

そしてこれは、年齢パラメータがURLで提供されている場合、$age varに設定されるか、デフォルトで27に設定されることを意味します

すべて見る PHP 7の新機能

三項演算子 に遭遇しました。基本的なif-elseステートメントの目的です。次のコードは同じことを行います。

三元:

$something = isset($_GET['something']) ? $_GET['something'] : "failed";

If-else:

if (isset($_GET['something'])) {
    $something = $_GET['something'];
} else {
    $something = "failed";
}
4
FThompson

三項演算子と呼ばれます。 if-elseブロックの省略形です。例についてはこちらをご覧ください http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

2

あなたが見ているものは 三項演算子 と呼ばれ、 PHPの実装 を見つけることができます。それは if elseステートメント。

if (isset($_GET['something']) == true) {
    thing = isset($_GET['something']);
} else {
    thing = "";
}
1
bmorenate

空の文字列のデフォルトが必要な場合、望ましい方法は次のいずれかです(必要に応じて):

_$str_value = strval($_GET['something']);
$trimmed_value = trim($_GET['something']);
$int_value = intval($_GET['somenumber']);
_

Urlパラメータsomethingrlに存在しないの場合、_$_GET['something']_ nullを返します

strval($_GET['something'])-> strval(null)-> _""_

変数_$value_は空の文字列に設定されます。

  • コードによっては、trim()strval()よりも優先される場合があります(たとえば、Nameパラメーターで使用する場合があります)
  • intval()数値のみが期待され、デフォルトがゼロの場合。 intval(null)-> _0_

考慮すべきケース:

_...&something=value1&key2=value2_(標準)

_...&key2=value2_(url $ _GETにパラメーターがない場合、nullを返します)

_...&something=+++&key2=value_(パラメーターは_" "_)

これが好ましいアプローチである理由:

  • それは1行にきちんと収まり、何が起こっているか明確です。
  • $value = isset($_GET['something']) ? $_GET['something'] : '';より読みやすい
  • コピー/貼り付けの間違いやタイプミスのリスクを低減:$value=isset($_GET['something'])?$_GET['somthing']:'';
  • 古いものと新しいphpとの互換性があります。

更新厳密モードでは、次のようなものが必要になる場合があります。

_$str_value = strval(@$_GET['something']);
$trimmed_value = trim(@$_GET['something']);
$int_value = intval(@$_GET['somenumber']);
_
1
TrophyGeek

?三項(条件付き)演算子と呼ばれます:

1
Nikola Ninkovic