11

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

以下是一个可能的示例:

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

如你所见,如果 $something->message 是正确的,我们返回 $something->message,但为什么要写两次呢?有没有办法做类似的事情:

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

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

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

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

4

1 回答 1

19

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

来源

例如

$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 的类型杂耍和阅读类型转换表。例如(bool)array()FALSE.

于 2010-08-27T00:09:37.417 回答