【问题标题】:Do these ternary operator output the same result?这些三元运算符是否输出相同的结果?
【发布时间】:2014-07-09 04:07:42
【问题描述】:

$time ?: 3600 是否等同于 isset($time) ? $time : 3600

谢谢大家。

【问题讨论】:

  • 试试$time = 0;

标签: php operator-keyword ternary


【解决方案1】:

没有。在某些情况下,它们的计算结果相同,但并不等价。

<?php
print $time ?: 3600;
print "\n";
print isset($time) ? $time : 3600;
print "\n\n";

$time = 0;
print $time ?: 3600;
print "\n";
print isset($time) ? $time : 3600;
print "\n\n";

$time = 30;
print $time ?: 3600;
print "\n";
print isset($time) ? $time : 3600;
print "\n\n";
?>

输出:

PHP Notice:  Undefined variable: time in /home/hq6/PHP/Test2.php on line 2
3600
3600

3600
0

30
30

【讨论】:

  • 我试过print $time ?: 3600;。它输出3600。 ~~
  • @Orion,您必须测试定义了$time 的情况和未定义$time 的情况。您还必须测试$time = 0的情况。
  • 我尝试了not defined 案例。有点奇怪。
  • @Orion,为了使两个表达式等价,它们必须为所有可能的输入输出相同的值。
  • @Orion,第一种情况给出了正确的输出但会产生警告。
【解决方案2】:

不,不完全是。 $time ?: 3600 类似于 $time ? $time : 3600

如果$time0,则不同。 isset($time) 会返回 TRUE,所以,你会得到 $time (0),而如果 $time 在第一个是 0,你会得到 3600

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 2020-07-19
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2016-06-26
    • 2021-10-06
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多