web-dev-qa-db-ja.com

php-疑問符のコロン演算子の意味

この行の?:はどういう意味ですか?

$_COOKIE['user'] ?: getusername($_COOKIE['user']);

ありがとうございました。

16
Lewis

ifステートメントの省略形です。

_$username = $_COOKIE['user'] ?: getusername($_COOKIE['user']);
_

と同じです

_if( $_COOKIE['user'] ) 
{
    $username = $_COOKIE['user'];
} 
else
{
    $username = getusername($_COOKIE['user']); 
}
_

こちらのテストスイートをご覧ください: https://3v4l.org/6XMc4

しかし、この例では、関数「getusername」は_$_COOKIE['user']_がelseの場合にのみemptyにヒットするため、正しく機能しない可能性があります。そのため、getusername()内のパラメーターも一種の空です。

21
trizz

それは、例えば手短なphpです:

(true == true ? echo "this is true" : "this is false")

これは、次のことを意味します。

if (true == true) {
    echo "This is true";
}
else {
    echo "This is false";
}

あなたの例では、elseステートメントしかありません。

2
Arko Elsenaar

これは、一般的にインラインifと呼ばれるものと同様に、三項演算子として知られています。たとえば、次の2つの例:

a)$genderString = $genderAbbreviation == "M" ? "Male" : "Female";

b)

if ($genderAbbreviation == "M")
{
    $genderString = "Male";
}
else
{
    $genderString = "Female";
}

これらは両方とも同じ効果があります。疑問符の前のステートメントはtrueまたはfalseに評価され、trueの場合はコロンの前のステートメントが実行され、falseの場合はコロンの後のステートメントが実行されます。

詳細については、PHPドキュメントの次のページにある「Ternary Operator」というタイトルのセクションを確認してください。

http://www.php.net/manual/en/language.operators.comparison.php

2
Nick Coad

もし$_COOKIE['user']値が存在し、次にNULLそれ以外の場合getusername($_COOKIE['user'] 動作します

これは、phpの項演算子です。

0
Rakesh Sharma