Php 速记如果解释?标记运算符

Php 速记如果解释?标记运算符,php,shorthand-if,Php,Shorthand If,对于模板引擎,如果条件允许,我希望使用速记。 我需要检查一个值是否为!=如果为空,则打印一些行。 我尝试的是: echo "test" ($user->affiliate_id !=null) ? 我不知道在?语法后面应该写什么 echo "test" . (($user->affiliate_id !=null) ? 'stringToOutput ifNotNull' : 'stringToOutput if is null'); echo 'test' . ($use

对于模板引擎,如果条件允许,我希望使用速记。 我需要检查一个值是否为!=如果为空,则打印一些行。 我尝试的是:

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

我不知道在?

语法后面应该写什么

echo "test" . (($user->affiliate_id !=null) ? 'stringToOutput ifNotNull' : 'stringToOutput if is null');
echo 'test' . ($user->affiliate_id ?? 'ID not found!');
echo(条件)?如果代码部分为真,则在此处写入:在此处写入其他部分

这意味着在你的情况下

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

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

如@Federinco所述,它被称为三元运算符,官方文档如下:

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

条件?真分支:假分支

例如:

$cost=isset($折扣)$总计-$折扣:$总计

在上面的例子中,我们检查是否设置了折扣,如果设置了折扣,我们将从当前总额中删除折扣,如果没有,我们只将成本设置为总额

使用三元运算符还可以做其他很酷的事情,例如:

$name=$username?:'Guest'

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

不过需要注意的是,如果您滥用三元运算符,它可能会导致可读性问题,因此在使用它时要小心,如果三元运算符不清楚它在做什么,不要牺牲标准条件语句的额外行。

您想要的是

您的代码应该如下所示

echo "test" . (($user->affiliate_id !=null) ? 'stringToOutput ifNotNull' : 'stringToOutput if is null');
echo 'test' . ($user->affiliate_id ?? 'ID not found!');
另外,PHP7还引入了您可以使用的。你可以这样做

echo "test" . (($user->affiliate_id !=null) ? 'stringToOutput ifNotNull' : 'stringToOutput if is null');
echo 'test' . ($user->affiliate_id ?? 'ID not found!');
在这种情况下,如果$user->affiliate_id设置为非空,则将打印它
而不是“找不到ID!”消息行
$someVariable=$condition$valueA:$valueB
相当于:

if ( $condition ) {
    $someVariable = $valueA;
}
else {
    $someVariable = $valueB;
}
if ( $someValue ) {
    $someVariable = $someValue;
}
else {
    $someVariable = $someOtherValue;
}
因此,基本上,如果条件为
TRUE
$someVariable
将取
符号后的第一个值。如果
FALSE
,它将采用第二个值(符号
后面的值)

有一种特殊情况,您可以不定义第一个值,它是这样的:
$someVariable=$someValue?:$someOtherValue
。这相当于:

if ( $condition ) {
    $someVariable = $valueA;
}
else {
    $someVariable = $valueB;
}
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
编辑:

运算符
?:
不是称为
三元运算符。有多种方法可以定义三元运算符(接受三个操作数的运算符)。它是一个三元运算符,但不是三元运算符。有些人称它为三元运算符,因为他们习惯于这样做,而且,它可能是PHP中唯一广为人知的三元运算符,但三元运算符要比这更一般

它的名称是条件运算符,或者更严格地说是三值条件运算符

假设我定义了一个名为
log base
的新运算符,它内联计算,如果一个数
$a
与base
$C
的对数等于
$B
,其语法类似于
$correct=$a log$B base$C
,如果对数正确,它将返回
TRUE
,或
FALSE
,如果不是


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

,这就是,只需读取doc
$variable=$condition$ifTrue:$ifFalse
相当于
if($condition){$variable=$ifTrue;}否则{$variable=$isFalse;}
它的可能副本实际上被称为条件运算符。是的,它是一个三值运算符(因为它需要三个操作数)。当用作二进制运算符(两个操作数)时,它也称为Elvis运算符(
?:
将其视为文本表情)。