$someVariable = $condition ? $valueA : $valueB 行相当于:
if ( $condition ) {
$someVariable = $valueA;
}
else {
$someVariable = $valueB;
}
所以,基本上,如果条件是TRUE,$someVariable 将采用? 符号之后的第一个值。如果是FALSE,则取第二个值(: 符号后面的那个)。
有一种特殊情况,您可以不定义第一个值,就像这样:$someVariable = $someValue ?: $someOtherValue。相当于:
if ( $someValue ) {
$someVariable = $someValue;
}
else {
$someVariable = $someOtherValue;
}
因此,如果$someValue 计算为TRUE(任何不同于0 的值都计算为TRUE),那么$someVariable 将捕获该值。否则,它将捕获$someOtherValue。
举个例子:
function printGender( $gender ) {
echo "The user's gender is: " . ( $gender == 0 ? "Male" : "Female" );
}
printGender(0); // Will print "The user's gender is: Male"
printGender(1); // Will print "The user's gender is: Female"
另一个例子:
function printValuesStrictlyDifferentThanZero( $value ) {
echo "Value: " . ( $value ?: 1 );
}
printValuesStrictlyDifferentThanZero(0); // $value evaluates to FALSE, so it echoes 1
printValuesStrictlyDifferentThanZero(1); // $value evaluates to TRUE, so it echoes that $value
编辑:
运算符?: 不称为ternary operator。有多种方法可以定义三元运算符(采用三个操作数的运算符)。它是一个三元运算符,但不是三元运算符。有些人只是称它为三元运算符,因为他们习惯于这样做,而且它可能是 PHP 中唯一广为人知的三元运算符,但三元运算符比这更通用。
它的名字是条件运算符,或者更严格地说,是三元条件运算符。
假设我定义了一个名为log base 的新运算符,它计算内联,如果一个数字$A 的对数以$C 为基数等于$B,其语法类似于$correct = $A log $B base $C,它返回@如果对数正确则为 987654345@,否则为 FALSE。
当然该操作是假设的,但它是三元运算符,就像?:。我将其称为对数检查运算符。