PHP三元运算符澄清

PHP三元运算符澄清,php,operators,ternary-operator,Php,Operators,Ternary Operator,我经常使用三元运算符,但在文档中找不到任何关于这一点的信息,我一直在想它 以下是一个可能的例子: echo ($something->message ? $something->message : 'no message'); 如您所见,如果$something->message是正确的,我们将返回$something->message,但为什么要写两次呢?有没有一种方法可以做到: echo ($something->message ? this : 'no message'

我经常使用三元运算符,但在文档中找不到任何关于这一点的信息,我一直在想它

以下是一个可能的例子:

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');
我找不到任何方法来做到这一点,所以我假设这是不可能的,如果我错了,请通知我,否则:为什么不?为什么这是不可能的,技术原因是什么,或者只是一些从未发生过的事情?我是否应该将其声明为变量,然后针对该变量进行测试

由于PHP5.3,可以省略三元运算符的中间部分。表达式expr1?:如果expr1的计算结果为真,则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;
}
智者的话

$used_value = function1() ?: $default_value;

如果您将依赖于对
TRUE
进行类型转换,那么了解哪些将类型转换为
TRUE
,哪些不会很重要。这可能值得我们温习一下PHP,并阅读下面的文章。例如
(bool)array()。我只是在读那一页,似乎直接跳过了那一部分。谢谢,也许我应该升级一下。时限到了我就接受你的答复<代码>回音($something->message?:'no message')在OP的第一个例子中,+1让php来给你一个惊喜,所有事物的三元运算符的一个模糊实现:)必须喜欢不协调性。@Kendall哇…:)我的大多数同事看到三元运算符时都会不高兴。我很想让他们尝试找出这些三元变量中的一个:)有趣的是,这是PHP6关于ifsetor()的头脑风暴的结果(请参阅),虽然这是一个整洁的特性,但实际上并不能解决原始问题,因为$\u GET['foo']?:''如果没有设置,仍然会抛出一个通知。可能重复的