PHP三元运算符澄清

时间:2010-08-27 00:04:32

标签: php operators ternary-operator

我经常使用三元运算符,但我无法在文档中找到任何关于此的内容,而且我一直都在想它。

以下是一个可能的例子:

echo ($something->message ? $something->message : 'no message');

正如您所看到的,如果$ something->消息是正确的,我们会返回$ something->消息,但为什么要写两次?有没有办法做类似的事情:

echo ($something->message ? this : 'no message');

现在我并不精通编程理论,所以有可能有一个原因是前者不能用之类的东西引用“”this“,但为什么不呢?这不会流水线使用三元运算符吗?对于像我的例子这样的东西,这很没用,但让我们说它是

echo (function(another_function($variable)) ? function(another_function($variable)) : 'false');

我无法找到任何方式来做到这一点,所以我认为这是不可能的,如果我错了请通知我,否则:为什么不呢?为什么这不可能,技术原因是什么,还是只是从未发生过的事情?我应该将其声明为变量然后针对该变量进行测试吗?

1 个答案:

答案 0 :(得分:19)

  

从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。

Source

例如

$used_value = function1() ?: $default_value;

相同
$check_value = function1(); //doesn't re-evaluate function1()
if( $check_value ) {
    $used_value = $check_value;
} else {
    $used_value = $default_value;
}

明智之道

如果你要依赖于对TRUE进行类型转换,那么理解将TRUE转换为什么以及什么不会转移是很重要的。可能值得刷新PHP的type juggling并阅读type conversion tables。例如,(bool)array()FALSE