37

私は自分のPHPの知識を広げたいと思っていますが、それが何であるか、あるいはそれを検索する方法さえわからない何かに出くわしました。私はphp.netissetコードを見ています、そして私は見ますisset($_GET['something']) ? $_GET['something'] : ''

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

4

8 に答える 8

82

これは一般に「速記」または三項演算子と呼ばれます。

$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 :)
于 2012-08-25T23:29:55.577 に答える
12

PHP 7では、さらに短く書くことができます。

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

これは、$age変数がageURLで指定されている場合はパラメーターに設定されるか、デフォルトで27に設定されることを意味します。

PHP7のすべての新機能をご覧ください。

于 2016-07-25T12:11:34.107 に答える
7

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

あなたが与えた例では、issetがtrueを返すと与えられた配列から値を取得するために使用することができます

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

と同等です

if (isset($_GET['something'])) {
 echo "Your error message!";
} else {
 $test = $_GET['something'];
}

エコー$テスト;

もちろん、何かに割り当てたり、ユーザーが送信した値にデフォルト値を割り当てたりしない限り、あまり役に立ちません。

$username = isset($_GET['username']) ? $_GET['username'] : 'anonymous'
于 2012-08-25T23:21:47.227 に答える
4

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

三項:

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

If-else:

if (isset($_GET['something'])) {
    $something = $_GET['something'];
} else {
    $something = "failed";
}
于 2012-08-25T23:23:23.933 に答える
2

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

于 2012-08-25T23:21:22.167 に答える
1

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

于 2012-08-25T23:21:35.460 に答える
1

あなたが見ているのは三項演算子と呼ばれ、PHPの実装はここにあります。それはif else声明です。

if (isset($_GET['something']) == true) {
    thing = isset($_GET['something']);
} else {
    thing = "";
}
于 2012-08-25T23:26:33.367 に答える
1

空の文字列のデフォルトが必要な場合は、次のいずれかをお勧めします(必要に応じて)。

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

urlパラメータurlにsomething 存在しない場合は、$_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']);
于 2017-04-01T04:28:18.440 に答える