如何在PHP中使用三元运算符(?:)作为"if/else"的简写?

Ste*_*ven 104 php ternary-operator conditional-operator

根据此页面中的示例,我在下面提供了工作和非工作代码示例.

工作代码使用if声明:

if (!empty($address['street2'])) echo $address['street2'].'<br />';
Run Code Online (Sandbox Code Playgroud)

使用三元运算符的非工作代码:

$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
Run Code Online (Sandbox Code Playgroud)

更新
在Brian的小费之后,我发现回声$test输出了预期的结果.以下作品就像一个魅力!

echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Run Code Online (Sandbox Code Playgroud)

Joh*_*sch 209

(condition) ? /* value to return if condition is true */ 
            : /* value to return if condition is false */ ;
Run Code Online (Sandbox Code Playgroud)

语法不是"简写if"运算符(?称为条件运算符),因为您无法以与执行代码相同的方式执行代码:

if (condition) {
    /* condition is true, do something like echo */
}
else {
    /* condition is false, do something else */
}
Run Code Online (Sandbox Code Playgroud)

在您的示例中,您echo$address非空时执行语句.您不能以条件运算符的相同方式执行此操作.但是,你可以做echo的是条件运算符的结果:

echo empty($address['street2']) ? "Street2 is empty!" : $address['street2'];
Run Code Online (Sandbox Code Playgroud)

这将显示"街道空无一人!" 如果它是空的,否则它将显示street2地址.

  • 简写又是什么?`condition ?: false` 如果为 true,则计算结果为 `condition`? (3认同)
  • 这就是陈述和表达的区别 (2认同)

Rab*_*ong 36

PHP 7+

从PHP 7开始,只需使用Null合并运算符就可以执行此任务,如下所示:

echo !empty($address['street2']) ?? 'Empty';

  • 登录只是为了否决此答案。这根本不符合广告所宣传的效果。 (4认同)
  • **这个答案是错误的!** 证明:https://ideone.com/bLJM55 它回显了 `!empty($address['street2'])` 的结果,这是真的,PHP 的 `echo` 会打印这是“1”。是的,很奇怪,但事情就是这样。 (4认同)
  • 仅供参考,如果$ address ['street2']`是一个空字符串。它将接受它,并且不会返回“ Empty”。isset()!=空()。仅当值为null时才有效 (2认同)
  • 如果$ address ['street2']`不为空,输出是什么? (2认同)
  • `empty()` **从不**返回 `null`,因此 `??` 永远不会给出所需的结果。我绝对**讨厌**当错误的答案毒害 Stack Overflow 知识库并向研究人员提供可证明是错误的建议时! (2认同)
  • 亲爱的研究人员,对于所发布的问题,这个答案仍然不正确。null 合并运算符将捕获“null”值,但不会捕获空字符串。研究人员不应该使用这个答案,他们当然也不应该赞成它。这是个糟糕的建议。 (2认同)

小智 26

基本的真/假声明

$is_admin = ($user['permissions'] == 'admin' ? true : false);
Run Code Online (Sandbox Code Playgroud)

有条件的欢迎辞

echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';
Run Code Online (Sandbox Code Playgroud)

条件项消息

echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';
Run Code Online (Sandbox Code Playgroud)

  • 你从速记网站上得到的,甚至没有参考它 (2认同)
  • 第一个例子是不正确的。')' 放错地方了。它应该位于“?”之前。完整的语句应该是 `$is_admin = ($user['permissions'] == 'admin') ?真:假;` (2认同)

adr*_*nks 11

三元运算符只是if和else块的简写.您的工作代码没有其他条件,因此不适用于此.

以下示例将起作用:

echo empty($address['street2']) ? 'empty' : 'not empty';
Run Code Online (Sandbox Code Playgroud)


Lea*_*ing 8

快捷方式:

echo $address['street2'] ? : "No";
Run Code Online (Sandbox Code Playgroud)

以下是一些有趣的示例,具有一种或多种不同的条件。

$color = "blue";

// Condition #1 Show color without specifying variable 
echo $color ? : "Undefined";
echo "<br>";

// Condition #2
echo $color ? $color : "Undefined";
echo "<br>";

// Condition #3
echo ($color) ? $color : "Undefined";
echo "<br>";

// Condition #4
echo ($color == "blue") ? $color : "Undefined";
echo "<br>";

// Condition #5
echo ($color == "" ? $color : ($color == "blue" ? $color : "Undefined"));
echo "<br>";

// Condition #6
echo ($color == "blue" ? $color : ($color == "" ? $color : ($color == "" ? $color : "Undefined")));
echo "<br>";

// Condition #7
echo ($color != "") ? ($color != "" ? ($color == "blue" ? $color : "Undefined") : "Undefined") : "Undefined";
echo "<br>";
Run Code Online (Sandbox Code Playgroud)


use*_*648 5

请注意,使用嵌套条件运算符时,您可能需要使用括号以避免可能的问题!

看起来 PHP 的工作方式至少与 Javascript 或 C# 不同。

$score = 15;
$age = 5;

// The following will return "Exceptional"
echo 'Your score is: ' . ($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average'));

// The following will return "Horrible"
echo 'Your score is: ' . ($score > 10 ? $age > 10 ? 'Average' : 'Exceptional' : $age > 10 ? 'Horrible' : 'Average');
Run Code Online (Sandbox Code Playgroud)

Javascript 和 C# 中的相同代码在两种情况下都返回“Exceptional”。

在第二种情况下,PHP 的作用是(或者至少我是这么理解的):

  1. $score > 10?是的
  2. $age > 10?否,因此当前$age > 10 ? 'Average' : 'Exceptional'返回“异常”
  3. 然后,它不只是停止整个语句并返回“Exceptional”,而是继续评估下一个语句
  4. 下一个语句将'Exceptional' ? 'Horrible' : 'Average'返回“Horrible”,因为“Exceptional”是真的

来自文档:http://php.net/manual/en/language.operators.comparison.php

建议您避免“堆叠”三元表达式。当在单个语句中使用多个三元运算符时,PHP 的行为并不明显。


Key*_*nja 5

您正在寻找的是三元运算符,也就是猫王运算符(google:P)。

echo $address['street2'] ?: 'Empty'; 
Run Code Online (Sandbox Code Playgroud)

它返回变量的值;如果变量为空,则返回默认值。