简写如果解释?标记运算符

时间:2016-01-27 12:39:38

标签: php shorthand-if

对于模板引擎,我想在条件时使用速记。 我需要检查一个值是否为!= null如果为true则打印出一行。 我尝试了什么:

echo "test" ($user->affiliate_id !=null) ?   

我不知道该怎么写?。

5 个答案:

答案 0 :(得分:2)

$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

修改

运营商?: NOT 称为ternary operator。有多种方法可以定义三元运算符(一个采用三个操作数的运算符)。 三元运算符,但不是 三元运算符。有些人只是把它称为三元运算符,因为他们习惯这样做,而且,它可能是PHP中唯一一个众所周知的三元运算符,但三元运算符比这更通用。

它的名称是条件运算符,或者更确切地说,是三元条件运算符

假设我定义了一个名为log base的新运算符,它内联计算一个数字$A的基数$C的对数是否等于$B及其语法例如$correct = $A log $B base $C,如果对数正确,则返回TRUE,如果不是,则返回FALSE

当然,该操作是假设的,但 是一个三元运算符,就像?:一样。我将其称为对数检查器运算符

答案 1 :(得分:1)

语法应该是这样的

echo (condition) ? write if true code part here : write else part here

这意味着在你的情况下它就像

echo ($user->affiliate_id !=null) ? 'test' : 'not null'

答案 2 :(得分:1)

如@Federinco所述,它被称为三元运算符,官方文档在这里:http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

三元运算符的工作原理如下:

condition ? true branch : false branch

所以一个例子是:

$cost = isset($discount) ? $total - $discount : $total;

在上面的示例中,我们检查是否已设置折扣,如果已将折扣从当前总额中删除,如果不是,我们只将成本设置为总数。

你可以用三元运算符做其他很酷的事情:

$name = $username ?: 'Guest';

在上面的代码中,我们检查$username是否存在,如果我们将$name设置为$username,否则我们将$name设置为Guest < / p>

但请注意,三元运算符如果滥用它会导致可读性问题,因此在使用它时要小心,如果三元运算符不打算,则不要牺牲标准条件语句的额外行明确它在做什么。

答案 3 :(得分:0)

试试这个:

echo ($user->affiliate_id != null )?"test":"";

答案 4 :(得分:0)

你想要的是ternary operator

您的代码应如下所示

echo "test" . (($user->affiliate_id !=null) ? 'stringToOutput ifNotNull' : 'stringToOutput if is null');

此外,PHP 7引入了您可以使用的Null coalescing operator。你可以这样做

echo 'test' . ($user->affiliate_id ?? 'ID not found!');

在这种情况下,如果设置了$ user-&gt; affiliate_id且不为null,则会打印它 而不是'未找到ID!'消息