if语句-PHP if简写


if statement - PHP if shorthand

我有一个字符串,我想把它附加到其他字符串中。比方说:

$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而不使用其他IF?

没有。然而,情况可能恰恰相反。以下是PHP文档中的一句话:

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

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

编号。。。三元表示需要条件的三个部分,真部分和假部分

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

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

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

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

但这实际上只是if的位移。但它接近于"没有其他的三元"。

您可以这样做:

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

如果反转语句,使三进制位于赋值的外部而不是内部,则可以将整个语句放在TRUE部分,然后在ELSE部分执行无操作命令。

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

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

编辑

我刚刚发现了这一点,并认为它派上了用场。你也可以像这样写if块

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

您不能在没有else/false部分的情况下使用三进制,但如果您的目的是将所有内容都放在一行上,我可以建议您尝试这种替代方法:

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

如果第一个是真的,它将继续进行第二个语句。否则将在第一次评估后立即停止,结果为false。

参考延迟评估(所谓的短路评估)

或者您可以做相反的事情,如果部分为空,则保留true,并只声明false,正如Andz正确指出的那样。

您可以创建一个可以执行所需操作的函数。而不是每次都写出if语句。

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

称之为:

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

请注意第二个参数是如何通过引用的,因此它也将在调用代码中更改。

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

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