Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP if速记_Php_If Statement_Conditional Operator - Fatal编程技术网

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