PHP三元运算符澄清

我经常使用三元运算符,但是我在文档中找不到任何东西,我一直在想.

以下是一个可能的例子:

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

如你所见,如果$something->消息是正确的,我们返回$something->消息,但是为什么要写两次?有办法做一些像:

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

现在我不懂编程理论,所以有可能是前者不能用“这”这样的引用,但为什么不呢?这不会流水线使用三元运算符吗?对于像我这样的例子,这是非常无用的,但让我们说

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

我无法找到任何办法,所以我假设是不可能的,如果我错了请通知我,否则为什么不呢?为什么这不可能,技术原因是什么,还是从来没有发生过的事情?我应该将其声明为变量,然后针对该变量进行测试?

最佳答案

Since PHP 5.3, it is possible to leave out the middle part of the ternary operator. Expression expr1 ?: expr3 returns expr1 if expr1 evaluates to TRUE, and expr3 otherwise.

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.

转载注明原文:PHP三元运算符澄清 - 代码日志