繁体   English   中英

PHP 如果简写

[英]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 而不用别的呢?

不。 然而,相反的情况也是可能的。 这是 PHP 文档中的引用:

自 PHP 5.3 起,可以省略三元运算符的中间部分。 表达式 expr1 ?: 如果 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位移。 但接近于“没有其他的三元”。

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

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

编辑

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

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

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

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

如果第一个是真的,它将继续第二个陈述。 否则将在第一次评估结果为 false 后停止。

参考惰性求值(所谓的短路求值

或者您可以做相反的事情,将true if部分留空,并声明 false,正如 Andz 正确指向的那样。

你可以这样做:

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

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

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

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

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

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

调用它:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM