PHP if速记
我有一个字符串,我想把它附加到其他字符串上。比如说:PHP if速记,php,if-statement,conditional-operator,Php,If Statement,Conditional Operator,我有一个字符串,我想把它附加到其他字符串上。比如说: $my_string = 'Hello'; $my_string .= ' there'; 这将返回“你好” 我想让这个条件如下: $my_string = 'Hello'; $append = 'do'; if ( $append == 'do' ) { $my_string .= ' there'; } 现在,我想使用三元运算来实现这一点,但我遇到的所有示例都是关于if/else的,类似于: $my_string .
$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而不使用else呢?否。。。三元表示需要条件的三个部分,真部分和假部分。然而,相反的情况是可能的。以下是PHP文档中的一段引用: 由于PHP5.3,可以省略三元运算符的中间部分。表达式expr1?:如果expr1的计算结果为真,则expr3返回expr1,否则返回expr3 您可以执行以下操作:
( $append == 'do' ) ? $my_string .= ' there' : $noop ;
( $append != 'do' ) ?: $my_string .= ' there';
如果将语句反转,使三元数位于赋值的外部而不是内部,则可以将整个语句置于TRUE部分,然后在ELSE部分执行无操作命令。结合mellamokb和Andz,可以执行以下操作:
( $append == 'do' ) ? $my_string .= ' there' : $noop ;
( $append != 'do' ) ?: $my_string .= ' there';
你可以创建一个函数来做你想做的事情。而不是每次都写出
if
语句
function doAppend($doIt, &$value, $appendValue)
{
if($doIt) $value .= $appendValue;
}
称之为:
doAppend($append == 'do', $my_string, ' there');
请注意第二个参数是如何引用的,因此它也将在调用代码中更改。检查条件然后附加到字符串的另一种方法是:
($append == 'do') and ($my_string .= ' there');
但这实际上只是一种位移。但是接近于“三元而无他者”。如果你考虑缩短代码,你可以在一行上写同样的东西
if ($append == 'do') {$my_string .= ' there';}
编辑
我刚刚发现了这一点,我的想法派上了用场。也可以这样编写if块
if ($append == 'do') $my_string .= ' there';
如果没有else/false部分,您不能使用三元,但如果您的目的是将所有内容都放在一行上,我建议您尝试以下替代方法:
($append == 'do' && $my_string .= ' there');
如果第一条是真的,它将继续第二条语句。否则将在第一次求值后停止,结果为false
参考惰性评估(所谓的)
或者,您可以做相反的事情,将trueif部分留空,并声明false,正如Andz正确指出的那样。一个简单而有效的方法是,如果您没有任何可返回的值,则使用
true
false值。您不仅有一个参数,而且还可以返回您想要的确切值,如
$my_string .= ( $append == 'do' ) ? ' there' : true;
你就不能把一个空字符串串接起来吗?可以只使用一个不太复杂的表达式吗?例如,不使用三元运算符,而只使用逻辑运算符?如果(条件)返回true,请尝试+我本来打算这么说的,但无法在ideone上正确测试:(它似乎越来越难以阅读,我不推荐它。这没用,它是错误的运算符。使用
或或或|
,但不是?
@hakre:它本来没有。但我注意到这通常更容易理解,便于解释。是的,当我被它们绊倒时,我很快就被激怒了。但是,它可以确实,让事情更容易阅读。比如空白,也可以删除,但没有人会这样做,至少总体上是这样。这种比较有技术名称吗?它像(exp为true)&&(当exp为true()时执行);
来自js