PHP if简写语法

20

我有一个字符串,想要将它与另一个字符串合并,例如:

$my_string = 'Hello';

$my_string .= ' there';

这将返回“Hello there”。

我想要像这样进行条件判断:

$my_string = 'Hello';

$append = 'do';

if ( $append == 'do' ) {

    $my_string .= ' there';

}

现在,我想使用三元操作符来完成这个任务,但我找到的所有示例都是针对if/else的,类似于:

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

只用 IF 而不使用 else,这是否可行?


4
你不能只是将空字符串与else连接起来吗? - Claudiu
1
只使用一个不太复杂的表达式,例如不使用三元运算符,而只使用逻辑运算符是否可以? - hakre
尝试如果(条件)返回真; - Amit Kumar Khare
9个回答

27

不可以。但相反的情况是可能的。以下是PHP文档中的一句话:

从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1 ?: expr3在expr1评估为TRUE时返回expr1,在其他情况下返回expr3。

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


23

三目运算指的是由条件、真值和假值三个部分组成。


21

结合mellamokb和Andz的方法,你可以这样做:

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

3
+1本来想说的,但无法在ideone上进行适当的测试:(它似乎变得越来越难以阅读,我不建议这样做。 - mellamokb
1
那是无用的,使用了错误的运算符。请使用 OR||,而不是 ? - hakre

5

检查条件并将其附加到字符串的另一种方法是:

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

但那只是一个if的替代。但它接近于"没有else的三元运算符"。


1
@hakre:最初没有加上它。但我注意到这样更容易理解解释。 - mario
是的,当我偶然发现它们时,我感到有点烦躁。不过,确实可以使阅读更加容易。就像空格一样,虽然可以省略,但大多数人都不会这样做。 - hakre
3
这个比较有没有一个专业术语? - Brian Fegter
这类似于(exp为真) && (当exp为真时执行_executes_when_exp_is_true();),来自JavaScript。 - Vladimir Ch

4
你可以这样做:
( $append == 'do' ) ? $my_string .= ' there' : $noop ;

如果您将三元运算符放在赋值语句的外面,而不是里面,那么您可以将整个语句放在TRUE部分,然后在ELSE部分执行一个无操作命令。


4

如果你考虑让代码更加简洁,你可以将同样的内容写在一行中。

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

编辑

我刚刚发现了这个方法,觉得可能会很有用。你也可以像下面这样编写if语句块:

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

4

如果您的目的是在一行上完成所有内容,那么您不能使用三元运算符而不带else/false部分,但我可以建议尝试这种替代方案:

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

如果第一个语句为真,则会继续执行第二个语句。否则,将在第一次评估后停止,结果为假。
参考惰性求值(所谓的短路求值)。
或者您可以相反,留下true if部分为空,并声明只有false,正如Andz正确指出的那样。

1
你可以创建一个函数来完成你想要的操作,而不是每次都写出 if 语句。
function doAppend($doIt, &$value, $appendValue)
{
    if($doIt) $value .= $appendValue;
}

使用以下方式调用:

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

请注意第二个参数是按引用传递的,因此在调用代码中也会被更改。

1
一个简单而非常有效的方法是在没有返回值时使用TRUEFALSE值。不仅您可以有一个参数,还可以返回您想要的确切值,例如:
$my_string .= ( $append == 'do' ) ? ' there' : true;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接