PHP三元运算符澄清

sam*_*sam 11 php operators ternary-operator

我经常使用三元运算符,但是我没有在文档中找到任何关于这个的东西,我一直想知道它.

以下是一个可能的示例:

echo ($something->message ? $something->message : 'no message');
Run Code Online (Sandbox Code Playgroud)

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

echo ($something->message ? this : 'no message');
Run Code Online (Sandbox Code Playgroud)

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

echo (function(another_function($variable)) ? function(another_function($variable)) : 'false');
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*ins 19

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

资源

例如

$used_value = function1() ?: $default_value;
Run Code Online (Sandbox Code Playgroud)

是相同的

$check_value = function1(); //doesn't re-evaluate function1()
if( $check_value ) {
    $used_value = $check_value;
} else {
    $used_value = $default_value;
}
Run Code Online (Sandbox Code Playgroud)

为聪明人说话

如果你要依赖于类型转换,TRUE那么理解什么是强制转换TRUE,什么不转换是很重要的.它可能值得刷新PHP的类型杂耍并阅读类型转换表.例如(bool)array()FALSE.

  • @Doug T.这不是*那个*obscure,http://en.wikipedia.org/wiki/%3F:#C_Variants (2认同)