PHP如果速记

时间:2011-06-22 23:09:45

标签: php if-statement ternary-operator shorthand-if

我有一个字符串,我想附加一些其他字符串。让我们说:

$my_string = 'Hello';

$my_string .= ' there';

这将返回'你好'。

我想这样做有条件:

$my_string = 'Hello';

$append = 'do';

if ( $append == 'do' ) {

    $my_string .= ' there';

}

现在,我想使用三元运算来做到这一点,但我遇到的所有例子都是if / else,它们会是这样的:

$my_string .= ( $append == 'do' ) ? ' there' : '';

所以可以只用IF而不用其他吗?

感谢。

9 个答案:

答案 0 :(得分:24)

不。但是,相反的情况是可能的。以下是PHP文档的引用:

  

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

http://php.net/manual/en/language.operators.comparison.php

答案 1 :(得分:18)

不......三元意味着你需要条件,真实部分和错误部分的三个部分

答案 2 :(得分:16)

结合mellamokb和Andz你可以做到这一点:

( $append != 'do' ) ?: $my_string .= ' there';

答案 3 :(得分:5)

检查条件然后追加到字符串的另一种方法是:

 ($append == 'do')  and  ($my_string .= ' there');

但那真的只是一个if位移。但接近于“没有别人的三元”。

答案 4 :(得分:4)

你可以这样做:

( $append == 'do' ) ? $my_string .= ' there' : $noop ;

如果你反转语句使得三元组位于外部而不是赋值内部,那么你可以将整个语句放在TRUE部分中,然后在ELSE中执行一些非操作命令一部分。

答案 5 :(得分:3)

如果您考虑缩短代码,可以在同一行中编写相同的内容。

if ($append == 'do') {$my_string .= ' there';}

修改

我刚刚发现了这个并且想法就派上用场了。您也可以像这样编写if块

if ($append == 'do') $my_string .= ' there';

答案 6 :(得分:1)

您可以创建一个能够满足您需求的功能。而不是每次都写出if语句。

function doAppend($doIt, &$value, $appendValue)
{
    if($doIt) $value .= $appendValue;
}

用以下方式调用:

doAppend($append == 'do', $my_string, ' there');

注意第二个参数是如何引用的,所以它也会在调用代码中被更改。

答案 7 :(得分:0)

你不能在没有else / false部分的情况下使用三元组,但如果你的目的是让一切都在一行上,我可以建议尝试这个替代方案:

($append == 'do' && $my_string .= ' there');

如果第一个为真,它将继续第二个语句。否则将在第一次评估后停止,导致错误。

请参阅延迟评估(所谓的Short-circuit evaluation

或者你可以做相反的事情,让 true 如果部分为空,并且声明只是假,正如Andz正确指出的那样。

答案 8 :(得分:0)

一种简单而有效的方法是,如果没有任何返回值,则使用TRUE FALSE值。不仅您有一个参数,而且还可以返回想要的确切值,例如

$my_string .= ( $append == 'do' ) ? ' there' : true;